Azure B2C - Blazor 中的颁发者 (Azure AD) 访问令牌

Azure B2C - Issuer (Azure AD) access token in Blazor

我有一个使用 B2C 作为身份管理系统的多租户应用程序,我们使用自定义策略根据文档 (https://docs.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-azure-ad-multi-tenant-custom?tabs=applications) 配置了 Azure AD 多租户。

当用户使用 Azure AD 登录时,我们有一些要求:

  1. 从 Azure AD 中检索用户的个人资料图片(通过图表 api)以显示在 应用
  2. 根据 Azure AD 最佳实践检索 Azure AD 租户名称,以显示在应用程序中。
  3. 读取目录用户,以便用户可以将其他用户添加到应用程序。

我正在尝试让 1 号正常工作,因为这将为我指明正确的方向。

首先,我尝试让 issueridpaccesstoken 按照 (https://docs.microsoft.com/en-us/azure/active-directory-b2c/idp-pass-through-custom) 传递,但这会使用户的初始登录膨胀太多,以至于我得到可怕的 400 headers too long 错误.花了几天时间尝试解决这个问题,这似乎每次都指向 "Clear your cookies" 的分辨率......但在这种情况下实际上不起作用。 cookie 实际上并没有那么多,而且 header 溢出似乎无处可修复。另外,我宁愿不直接从我的前端接收访问令牌和调用图 api,而是从我的 .net 核心 webapi 后端接收访问令牌并调用图 api 并代理图片或任何其他图 API 我想做的操作。为实现这一目标,我查看了后端 api 的基于应用程序的身份验证,但似乎要在应用程序中使用多个管理员同意等,这似乎也是一个漫长的过程,我会而是在用户从前端初始登录时执行。

我研究了多种解决方案,考虑创建一个身份守护进程,在互联网上搜索各种选项。然而,似乎应该简单的东西过于复杂。

这让我回答了我的问题:

  1. 是否可以在 B2C 中不通过颁发者访问令牌,而是稍后在需要时请求访问令牌?我如何从后端执行此操作 API?
  2. 如果以上不可能,有没有人能够通过发行者访问令牌而不得到 headers too long 错误?是否有任何示例可以解释如何在 B2C 的自定义策略中执行此操作,以及在收到访问令牌时在代码中处理该访问令牌?我试图删除一些从 Azure AD 和 B2C 本身返回的声明,但似乎我无法充分降低声明以避免导致溢出。
  3. 如果唯一的选择是通过它,您如何在前端安全地管理该令牌?

非常感谢!

不要在前端存储令牌。使用 client credentials flow. Take a look at Get access without a user 从 API 调用 MS Graph 以获取更多信息。

您可以满足所有 3 个要求,调用具有最低要求权限的以下端点:

  1. Get photo using User.Read.All application permission.
  2. Get organization using Organization.Read.All application permission.
  3. List users using User.Read.All application permission.