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

时间:2020-04-28 14:26:11

标签: openid azure-ad-b2c blazor

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

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

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

我正在尝试让1号数字正常工作,因为这将使我在其余方向上保持正确的方向。

首先,我尝试按照(https://docs.microsoft.com/en-us/azure/active-directory-b2c/idp-pass-through-custom)传递issueridpaccesstoken,但这使用户的初始登录膨胀得太多,以至于我得到了可怕的400个标题过长的错误。花了几天时间尝试解决该问题,似乎每次都指向“清除cookie”的解决方案...但是在这种情况下,这实际上是行不通的。 cookie实际上并不多,而且似乎没有地方可以解决标头溢出的问题。另外,我宁愿不直接从前端接收访问令牌并调用图api,而是从我的.net核心webapi后端接收并代理图片或我想执行的任何其他Graph API操作。为了实现这一点,我使用后端api查看了基于应用程序的身份验证,但似乎要花很长时间才能在应用程序中稍后获得多个管理员的同意,等等,而我宁愿在初始时执行此操作。从前端登录用户。

我研究了多种解决方案,研究了创建身份守护程序,在Internet上搜索了选项。.但是,看起来应该很简单的东西却过于复杂。

这是我的问题:

  1. 是否可以不通过B2C中的发行者访问令牌,而是稍后在需要时请求访问令牌?我将如何从后端API做到这一点?
  2. 如果以上操作均不可行,是否有人能够通过发行者访问令牌而不会出现标题太长的错误?是否有示例说明了如何在B2C的自定义策略中执行此操作,以及在收到访问令牌时以代码方式处理该访问令牌?我试图删除一些从Azure AD和B2C本身返回的声明,但是似乎我不能充分降低声明的数量以免引起溢出。
  3. 如果唯一的选择就是通过令牌,您如何在前端安全地管理该令牌?

非常感谢!

1 个答案:

答案 0 :(得分:1)

不要在前端存储令牌。使用client credentials flow从您的API调用MS Graph。请查看Get access without a user了解更多信息。

您可以使用最低要求的权限来调用以下端点来完成所有3个要求:

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