用于获取需要传递给Graph API的访问令牌的上下文

时间:2017-09-04 19:17:26

标签: azure-active-directory access-token microsoft-graph openid-connect

在我使用OpenID连接协议从Azure AD获取访问令牌的初步分析中,我发现有两种方法可以考虑

  1. 使用已登录用户使用缓存的上下文获取访问令牌。

  2. 使用应用程序上下文获取访问令牌。

  3. 任何人都可以通过一些示例代码帮助我了解哪些需要考虑。

2 个答案:

答案 0 :(得分:0)

要获取图API的访问令牌,您需要:

  • 将用户重定向到Azure授权端点(https://login.microsoftonline.com/common/oauth2/v2.0/authorize),

  • 取回授权令牌,

  • 您需要在访问令牌端点(https://login.microsoftonline.com/common/oauth2/v2.0/token)上为Azure提供应用程序凭据。

  • 最后,您可以将此访问令牌提供给图API上的userinfo端点:https://graph.microsoft.com/v1.0/me

  

使用一些示例代码

我编写了一个示例代码,但它完全取决于您使用的语言,环境和OIDC库。如果您在具有OIDC(MITREid Connect)的MIT实现的servlet环境中使用Java,我在GitHub上可以通过Azure上的OIDC访问Microsoft图形API的示例:https://github.com/AlexandreFenyo/mitreid-azure

答案 1 :(得分:0)

  
    

使用登录用户使用缓存的上下文获取访问令牌。

  

OpenID Connect实施身份验证,作为OAuth 2.0授权流程的扩展。它以id_token的形式提供有关最终用户的信息,用于验证用户的身份并提供有关用户的基本配置文件信息。

请参阅代码示例:Calling a web API in a web app using Azure AD and OpenID Connect,此示例使用OpenID Connect ASP.Net OWIN中间件和ADAL .Net。在控制器中,您可以使用登录用户的上下文获取特定资源的访问令牌:

string userObjectID = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value;
AuthenticationContext authContext = new AuthenticationContext(Startup.Authority, new NaiveSessionCache(userObjectID));
ClientCredential credential = new ClientCredential(clientId, appKey);
result = await authContext.AcquireTokenSilentAsync(todoListResourceId, credential, new UserIdentifier(userObjectID, UserIdentifierType.UniqueId));
  
    

使用应用程序上下文获取访问令牌。

  

你是什么意思"应用程序上下文" ?如果您正在讨论OAuth 2.0客户端凭据授予流,该流允许Web服务(机密客户端)使用其自己的凭据而不是模拟用户,则在调用其他Web服务时进行身份验证。您可以参考此scenario explanationcode samples