【发布时间】:2020-07-02 17:36:08
【问题描述】:
用户故事:给定一个 ADB2C 用户,具有全局管理员角色和01234567-901a-bcde-f012-3456789abcde 的 oid(不是真正的 oid),我希望能够以该用户身份登录并从“https://graph.microsoft.com/beta/me”检索用户配置文件" 或 "https://graph.microsoft.com/beta/users/01234567-901a-bcde-f012-3456789abcde"。两者都在文档中列为 B2C 的有效端点。
在仅分配了 Microsoft Graph 权限范围的应用注册中,我使用邮递员请求不记名令牌以访问 MS Graph。有一个 Web 重定向 URI (https://oauth.pstmn.io/v1/callback),一个客户端密码,并且对访问和 id 令牌都启用了隐式授权。
请求的范围是:openid offline_access https://graph.microsoft.com/Directory.AccessAsUser.All
同样,B2C 用户帐户具有全局管理员角色。
- 隐式流返回错误消息
AADB2C90205:此应用程序对此 Web 资源没有足够的权限来执行该操作。
- 当包含应用程序机密时,授权代码流缺少访问承载令牌。有一个 ID 令牌和一个刷新令牌,但没有访问令牌。无论我是否将授权发送到外部浏览器,都有和没有 PKCE。
我租户中的应用有一个用户流B2C_1_postman,基本上是默认的。它适用于邮递员、其他测试应用程序以及 B2C 管理刀片中的“运行用户流”功能。
身份验证端点是:
https://{Tenant}.b2clogin.com/{Tenant}.onmicrosoft.com/B2C_1_postman/oauth2/v2.0/authorize
令牌端点是:
https://{Tenant}.b2clogin.com/{Tenant}onmicrosoft.com/B2C_1_postman/oauth2/v2.0/token
我已经通过 Microsoft 的 github 存储库中的几个桌面演示复制了这种行为,现在使用 Postman。该应用程序名为“邮递员”,位于 ADB2C 租户中。我授予它以下应用 API 范围:
Directory.AccessAsUser.All
Directory.Read.All
Directory.ReadWrite.All
Directory.email
Directory.offline_access
Directory.profile
此过程反映了https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop 的桌面演示设置的内容,唯一的例外是我希望我的桌面应用程序使用 MS Graph,而不是 NodeJS 示例应用程序。 (如果我为示例应用添加端点,这个应用注册就可以正常工作。但指定 MS Graph 范围总是返回一个空的访问 ID。)
我怎样才能让它工作?
【问题讨论】:
标签: microsoft-graph-api azure-ad-b2c