我有一个多租户应用程序,它使用B2C作为身份管理系统,我们根据文档配置了Azure AD多租户(https://learn.microsoft.com/en-us/azure/active-directory-b2c/identity-provider-azure-ad-multi-tenant-custom?tabs=applications)使用自定义策略。
当用户使用Azure AD登录时,我们有一些要求:
- 从Azure AD检索用户的个人资料图片(通过图形api(以显示在应用程序
- 根据Azure AD最佳实践,检索要在应用程序中显示的Azure AD租户名称
- 读取用户目录,以便用户可以将其他用户添加到应用程序中
我正试图让1号工作,因为这将为我的其他工作指明正确的方向。
首先,我尝试根据(https://learn.microsoft.com/en-us/azure/active-directory-b2c/idp-pass-through-custom),但这让用户的初始登录过于膨胀,以至于我收到了可怕的400个标头过长的错误。花了几天时间试图解决这个问题,似乎每次都指向"清除你的cookie"的解决方案。。。但在这种情况下,这实际上是行不通的。cookie实际上并没有那么多,而且似乎没有任何地方可以修复头溢出。此外,我更愿意不直接从我的前端接收访问令牌和调用图形api,而是从我的.net核心webapi后端接收,并代理图片或我想做的任何其他graph api操作。为了实现这一点,我使用后端api研究了基于应用程序的身份验证,等等,我宁愿在用户从前端首次登录时这样做。
我研究了多种解决方案,考虑创建一个身份守护程序,在互联网上搜索选项。。然而,看似简单的事情却过于复杂。
这就引出了我的问题:
- 是否可以在B2C中不通过颁发者访问令牌,而是在需要时稍后请求访问令牌?我将如何从我的后端API做到这一点
- 如果以上不可能,是否有人能够通过颁发者访问令牌而不会得到标头过长的错误?有没有任何示例可以解释如何做到这一点,无论是在B2C的自定义策略中,还是在收到访问令牌时在代码中处理访问令牌?我已经尝试删除从Azure AD和B2C本身返回的一些索赔,但我似乎无法充分减少索赔,以免造成溢出
- 如果唯一的选择是通过,您如何在前端安全地管理该代币
非常感谢!
不要在前端存储令牌。使用客户端凭据流从API调用MS Graph。有关详细信息,请参阅"无用户访问"。
您可以用最低要求的权限调用以下端点来满足所有3个要求:
- 使用User.Read.All应用程序权限获取照片
- 使用organization.Read.All应用程序权限获取组织
- 列出使用User.Read.All应用程序权限的用户