Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure active directory 如何正确续订服务器到服务器调用的ADAL身份验证令牌_Azure Active Directory_Adal_Microsoft Graph Api - Fatal编程技术网

Azure active directory 如何正确续订服务器到服务器调用的ADAL身份验证令牌

Azure active directory 如何正确续订服务器到服务器调用的ADAL身份验证令牌,azure-active-directory,adal,microsoft-graph-api,Azure Active Directory,Adal,Microsoft Graph Api,在我的场景中,用户授予我的AAD应用程序使用Microsoft Graph API在服务器进程中不时读取其电子邮件的权限。在用户授予权限时,我正在使用authContext.GetAuthorizationRequestURL和authContext.AcquireTokenByAuthorizationCodeAsync获取令牌。此后,每当我需要访问令牌时,我都会执行以下操作: TokenCache tokenCache; // deserialized Authenticat

在我的场景中,用户授予我的AAD应用程序使用Microsoft Graph API在服务器进程中不时读取其电子邮件的权限。在用户授予权限时,我正在使用authContext.GetAuthorizationRequestURL和authContext.AcquireTokenByAuthorizationCodeAsync获取令牌。此后,每当我需要访问令牌时,我都会执行以下操作:

    TokenCache tokenCache; // deserialized
    AuthenticationContext authContext = CreateAuthContext(authority, tokenCache);
    AuthenticationResult authResult = await authContext.AcquireTokenAsync(
            resource, 
            new ClientCredential(clientId, clientKey));
    return authResult.AccessToken;
不幸的是,使用生成的accesstoken调用MS Graph API会返回403(禁止)


我得到的印象是,我没有用正确的信息调用AcquireToken*()的正确风格。熟悉此场景的任何人?

问题中指示的AcquireTokenAsync重载将获取仅应用程序的令牌。需要一个接受ClientCredential和UserIdentifier参数的AcquireToken重载,但不幸的是,这种重载并不存在


但是,您可以继续使用访问令牌,直到其过期(请使用AuthenticationResult.ExpiresOn进行检查),然后将AuthenticationResult.RefreshToken与AcquireTokenByRefreshTokenAsync API一起使用,以获取新的访问令牌。

问题中指示的AcquireTokenAsync重载将获取仅应用程序的令牌。需要一个接受ClientCredential和UserIdentifier参数的AcquireToken重载,但不幸的是,这种重载并不存在


但是,您可以继续使用访问令牌,直到其过期(请使用AuthenticationResult.ExpiresOn进行检查),然后将AuthenticationResult.RefreshToken与AcquireTokenByRefreshTokenAsync API一起使用,以获取新的访问令牌。

很酷,谢谢。我确实弄明白了令牌的应用程序唯一性。我最终通过创建并传递一个UserAssertion使代码正常工作,该断言由以下内容组成:前一个访问令牌、用户名和神秘字符串:
““urn:ietf:params:oauth:grant type:jwt bearer”
。它似乎起作用了。你能评论一下这个解决方案的有效性吗?这对我来说根本不起作用。目前,我似乎有一个解决方案可以使用AcquireTokenUsingRefreshToken()。很好,谢谢。我确实弄明白了令牌的应用程序唯一性。我最终通过创建并传递一个UserAssertion使代码正常工作,该断言由以下内容组成:前一个访问令牌、用户名和神秘字符串:
““urn:ietf:params:oauth:grant type:jwt bearer”
。它似乎起作用了。你能评论一下这个解决方案的有效性吗?这对我来说根本不起作用。目前,我似乎有一个解决方案可以使用AcquireTokenUsingRefreshToken()。