Rob*_*ins 4 azure-ad-b2c microsoft-graph-api
用户故事:给定一个 ADB2C 用户,具有全局管理员角色和 oid 01234567-901a-bcde-f012-3456789abcde(不是真正的 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 资源执行该操作。
我的租户中的应用程序有一个用户流程,B2C_1_postman基本上是默认的。它与邮递员、其他测试应用程序以及 B2C 管理刀片中的“运行用户流程”功能配合得很好。
身份验证端点是:
https://{Tenant}.b2clogin.com/{Tenant}.onmicrosoft.com/B2C_1_postman/oauth2/v2.0/authorize
Run Code Online (Sandbox Code Playgroud)
令牌端点是:
https://{Tenant}.b2clogin.com/{Tenant}onmicrosoft.com/B2C_1_postman/oauth2/v2.0/token
Run Code Online (Sandbox Code Playgroud)
我已经通过 Microsoft 的 github 存储库中的几个桌面演示复制了此行为,现在又使用 Postman。该应用程序名为“postman”,位于 ADB2C 租户中。我授予它以下应用程序 API 范围:
Directory.AccessAsUser.All
Directory.Read.All
Directory.ReadWrite.All
Directory.email
Directory.offline_access
Directory.profile
Run Code Online (Sandbox Code Playgroud)
此过程反映了https://github.com/Azure-Samples/active-directory-b2c-dotnet-desktop上的桌面演示的设置,唯一的例外是我想要我的桌面应用程序,而不是 NodeJS 示例应用程序使用 MS Graph。(如果我添加示例应用程序的端点,则此应用程序注册工作得很好。但指定 MS Graph 范围始终返回空访问 ID。)
我怎样才能让它发挥作用?
通过 Graph API 管理用户似乎仍然需要使用应用程序权限。因此,您不需要在 B2C 中向应用程序添加委托权限,而是需要添加应用程序权限,其中您将 Graph API 作为应用程序调用,而不是代表用户。文档中的说明详细解释了应用程序注册:https://learn.microsoft.com/en-us/azure/active-directory-b2c/microsoft-graph-get-started
您需要授予此应用程序对 Graph API 的应用程序权限,而不是委派权限。然后纯粹使用这些应用程序凭据来调用 Graph API。并且您需要使用底层 Azure AD 的令牌端点,而不是 B2C 策略令牌端点。
由于您的应用程序是桌面应用程序(公共客户端应用程序),因此您需要在后端服务中进行 Graph API 交互,您可以使用代表用户获取的 B2C 令牌进行身份验证。
这里一片混乱。您绝对可以做您想要做的事情,只不过这是所有 Azure AD 功能,而不是 Azure AD B2C。因此,您不打算调用任何 B2C 用户流程等。B2C 身份验证无法访问 Microsoft API,只能访问您自己的 API。
B2C 租户包含:
根据身份验证请求,该请求被路由到两个不同的令牌颁发者。
下一个关键点:
根据上述规则集,您无法使用tenantName.b2clogin.com 获取MS Graph API 的令牌。
这意味着用户 B2C 身份验证不能用于授权 AAD 受保护的应用程序或 Microsoft API。(尽管新的 App Reg 体验允许将 B2C 应用程序注册的权限分配给 MS Graph,但我们正在寻求解决这个问题)。
当您使用 login.microsoftonline.com 并且不提供针对 B2C 租户的任何策略 ID 参数时,您会访问 B2C 租户的 AAD 端点,它会再次起作用。例如,您可以使用用户上下文获取 Microsoft Graph API 的令牌。
当您使用tenantName.b2clogin.com 并针对B2C 租户提供任何策略ID 参数时,您会访问B2C 租户的AAD B2C 端点,现在它不会按您预期的方式工作。希望上面的内容能解释清楚原因。由于 AAD 端点没有被弃用,因此您不需要使用此域名来进行此类调用。
摘要是,按照此示例,将您的方案视为纯 Azure AD 方案。您仅为该组织目录中的帐户创建应用程序注册。当提示输入类型时。
| 归档时间: |
|
| 查看次数: |
3369 次 |
| 最近记录: |