继续我问的这个问题。我正在尝试在我的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混淆。它绝对不应该用于做出身份验证决策。这纯粹是提供信息。