[英]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之前,必须首先授予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终结点的说明,但总体思路是相同的:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.