请求访问资源时出现错误AADSTS50020https://graph.windows.net/.


Error AADSTS50020 when requesting access to resource https://graph.windows.net/

继续我问的这个问题。我正在尝试在我的PHP web应用程序上实现"使用O365帐户登录"功能。

当我的应用程序请求访问Graph API资源(https://graph.windows.net/)时,似乎只有管理员才能允许访问。如果非管理员试图完成OAuth工作流,他们会从login.windows.net:中收到此错误

AADSTS50020: This operation can only be performed by an administrator. Sign out and sign in as an administrator or contact one of your organization's administrators.

我并不是真的想访问目录中所有用户的详细信息(我可以理解这样需要管理员权限的事情),而是只想访问当前登录用户(管理员或非管理员)的姓名/电子邮件。

因此,我基本上需要任何O365用户都能允许我的应用程序读取他们的基本个人资料信息。图形API是正确的方法吗?为了实现这一点,我需要做些什么?

如果将'scope=openid'添加到OAuth令牌请求中,则AAD的响应应包含'id_token'密钥。该密钥的值是一个未签名JWT令牌,如果目录中有关于用户的以下属性,您将在其中找到这些属性:

  • oid=目录ObjectId
  • tid=用户所属的租户id GUID
  • iss=发卡机构
  • upn
  • 电子邮件
  • 主题
  • 给定名称
  • family_name

注意:与基本OAuth令牌响应一起返回的id_token是一个未签名令牌。不应将其与OpenID Connect协议响应中返回的签名id_token混淆。它绝对不应该用于做出身份验证决策。这纯粹是提供信息。