繁体   English   中英

如何获取已登录用户的Azure AD访问令牌?

[英]How to get Azure AD access token for already logged in user?

我们在Microsoft Azure平台中运行一个应用程序服务(一个PHP网站)。 只有在用户已经登录后,才能访问该网站。身份验证基于Azure AD。 一切正常。

现在,从网站的PHP代码中,我想获取已登录用户的Azure AD组成员身份。

我阅读了很多Web资源,解释了如何从网站登录用户到Azure AD,从而获得授权/访问令牌,以执行其他操作,例如检索组成员身份和许多其他内容。 但这不是我想要的。 用户已经登录并且可以成功使用该网站。 (否则,Microsoft会将用户重定向到单点登录页面。)

使用PHP,例如,我可以从对网站的任何访问的请求标头中检索登录用户的用户名。 并且在请求标头中还存储了一些“访问令牌”,以及其他内容,例如“客户端主体ID”。 但是我不知道这是否是我可以用于其他操作的授权/访问令牌。 也许/也许我做错了什么。 例如,使用cURL请求https://graph.microsoft.com/v1.0/me/memberOf ,我收到一个InvalidAuthenticationToken错误,提示“ CompactToken解析失败”。 我把“授权:承载{访问令牌}”和“接受:应用/ JSON”到请求头中将此作为解释在这里 (我没有关于令牌类型的明确信息,因此我只像示例中那样假设“承载者”是正确的。也许这已经是错误的。)

我不知道如何进行解决。 也许我遗漏的一点根本不在我的cURL请求中,而是在AD和/或App Service的Azure设置中。 我希望您能提供帮助。

您走在正确的轨道上。

访问令牌

使用OAuth2或OIDC针对Azure AD成功进行身份验证后,您将获得访问令牌 访问令牌是基于64位编码的JSON Web令牌(JWT),可用于访问其他受保护的资源。

访问令牌可能看起来像这样:

EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==

您可以使用https://jwt.io进一步浏览其内容。

注意:以上令牌已缩短。 就其完整形式而言,它相当长。

在其他工作中,您需要访问令牌来针对将来使用相同身份提供者(在本示例中为Azure AD)保护的任何API发出请求。

访问受保护的API

但是,在使用令牌访问任何API之前,必须首先授予Azure AD应用程序必要的权限。 看到这个链接

注意:该链接适用于v1.0 Azure AD终结点。

排序所需的权限后,就可以开始执行请求。 您发出的请求看起来像,例如

GET https://graph.microsoft.com/v1.0/me 
Authorization: Bearer eyJ0eXAiO ... 0X2tnSQLEANnSPHY0gKcgw
Host: graph.microsoft.com

在这里,令牌是在Authorization: Bearer

进一步阅读

请参阅此链接以进一步阅读。 该链接包含有关如何使用v2.0 Azure AD终结点的说明,但总体思路是相同的:

  1. 注册一个应用
  2. 授予应用访问资源的权限
  3. 获取访问令牌
  4. 使用令牌执行请求

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM