php - 如何为已登录的用户获取 Azure AD 访问 token ?

标签 php azure azure-web-app-service azure-active-directory microsoft-graph-api

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

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

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

使用 PHP,我可以从任何访问网站的请求 header 中检索登录用户的用户名。请求 header 中还存储了一些“访问 token ”,以及其他内容,例如“客户端主体 ID”。但我不知道这是否是我可以用于其他操作的授权/访问 token 。或者也许/可能我做错了什么。例如,请求 https://graph.microsoft.com/v1.0/me/memberOf使用 cURL,我收到“CompactToken 解析失败”的 InvalidAuthenticationToken 错误。我将“Authorization:Bearer {access token}”和“Accept:application/json”放入请求 header 中,如here所述。 (我没有关于 token 类型的明确信息,因此我只是假设“Bearer”是正确的,就像示例中一样。也许这已经是错误的。)

我不知道如何继续才能找到解决方案。也许我缺少的一点根本不在我的 cURL 请求中,而是在 AD 和/或应用服务的 Azure 设置中。我希望得到您的帮助。

最佳答案

您走在正确的道路上。

访问 token

当您使用 OAuth2 or OIDC 成功根据 Azure AD 对自己进行身份验证时,您将得到 access token 。访问 token 是 Base 64 编码的 JSON Web token (JWT),可用于访问其他 protected 资源。

访问 token 可能如下所示:

EwAoA8l6BAAU ... 7PqHGsykYj7A0XqHCjbKKgWSkcAg==

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

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

在其他工作中,您需要访问 token 才能对使用同一身份提供商(在本例中为 Azure AD)保护的任何 API 执行 future 请求。

访问 protected API

但是,在使用 token 访问任何 API 之前,您必须首先向 Azure AD 应用程序授予必要的权限。看这个link

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

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

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

这里, token 是在Authorization: Bearer之后的内容。

进一步阅读

查看此link供进一步阅读。该链接包含有关如何使用 v2.0 Azure AD 端点的说明,但总体思路是相同的:

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

关于php - 如何为已登录的用户获取 Azure AD 访问 token ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49317743/

相关文章:

php - 如何禁止在 PHP 中使用某个函数?

c# - Azure 应用服务不可用

azure - 如何在 Azure 中向 Microsoft Teams Bot 添加授权

node.js - 在 Azure 应用服务上配置 Node 的默认文档

powershell - 如何使用 Azure REST API 创建一个与私有(private) Github 存储库集成的新 Azure 网站?

php - PDO 事务是否涵盖 PDO::query()?

javascript - 有没有办法让PHP函数在后台运行?

php - 如何为 Multi-Tenancy 配置 Paypal?

azure - 如何删除 Azure AD MFA 以进行端到端功能自动化测试

Azure Web App - 将具有自定义域的生产槽备份恢复到部署槽