代码之家  ›  专栏  ›  技术社区  ›  iddqd

无法刷新azure java sdk中多个资源的令牌

  •  0
  • iddqd  · 技术社区  · 5 年前

    在通过重定向URL授权后尝试调用两个不同的资源时,第一个调用完成,第二个调用无法使用刷新其令牌 "HTTP 401 Unauthorized"
    在下面的代码中,对第二个服务的调用总是失败(即使更改调用顺序或多次调用第一个服务)

    ApplicationTokenCredentials applicationTokenCredentials = new ApplicationTokenCredentials(clientId, domain, secret, AzureEnvironment.AZURE);
    DelegatedTokenCredentials delegatedTokenCredentials = new DelegatedTokenCredentials(applicationTokenCredentials, redirectUrl, code);
    Azure.Authenticated azureAuth = Azure.authenticate(delegatedTokenCredentials);
    
    //First call - resource : https://management.core.windows.net/
    azureAuth.subscriptions().list();
    
    //Second call - resource : https://graph.windows.net/
    azureAuth.servicePrincipals().list();
    

    经过一些调试,我发现Azure SDK上的以下函数失败: (com.microsoft.azure.credentials.RefreshTokenClient)

    AuthenticationResult refreshToken(String tenant, String clientId, String resource, String refreshToken, boolean isMultipleResourceRefreshToken) {
        try {
            RefreshTokenResult result = service.refreshToken(tenant, clientId, "refresh_token", resource, refreshToken)
                .toBlocking().single();
            if (result == null) {
                return null;
            }
            return new AuthenticationResult(
                result.tokenType,
                result.accessToken,
                result.refreshToken,
                result.expiresIn,
                null,
                null,
                isMultipleResourceRefreshToken);
        } catch (Exception e) {
            return null;
        }
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   ljhljh235    5 年前

    azure-client-authentication 通过删除 RefreshTokenClient https://github.com/Azure/autorest-clientruntime-for-java/releases/tag/v1.6.13 . 您可以尝试更新到此版本。