在我使用OpenID连接协议从Azure AD获取访问令牌的初步分析中,我发现有两种方法可以考虑
使用已登录用户使用缓存的上下文获取访问令牌。
使用应用程序上下文获取访问令牌。
任何人都可以通过一些示例代码帮助我了解哪些需要考虑。
答案 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 explanation和code samples。