c# - BFF 到带有 AAD/Entra ID B2C 的内部 API (.NET/ASP.NET Core/Identity.Web)

标签 c# .net oauth-2.0 azure-active-directory azure-entra-id

我有一个 BFF,它的 API 可以被公众账户使用,我想使用 Entra/AAD B2C。 API/BFF 应该能够访问使用 Entra ID/AAD 的内部 API。

我的计划是通过“代表流程”(OBO)实现以下流程

https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-on-behalf-of-flow

我有两个应用程序注册,每个租户一个(B2C + 内部)。我使内部应用程序注册表对 B2C 租户可见,并为 B2C 应用程序注册表授予了内部应用程序注册表中专用范围的权限。

公共(public)用户进行身份验证:

https://<myb2cdomain>.ciamlogin.com/<myb2ctenantId>/oauth2/v2.0/authorize使用 PKCE 的授权代码流程。

为了获取可以针对我的 BFF 使用的 token ,我使用 B2C 应用程序注册表中定义的范围。

这有效,我得到了一个 token 。

现在我尝试初始化 OBO 流程:

https://<myb2cdomain>.ciamlogin.com/<myb2ctenantid>/oauth2/v2.0/token

https://login.microsoft.com/<myb2ctenantid>/oauth2/v2.0/token

使用访问 token 作为断言和内部 API 的范围。

第一个给了我

AADSTS500207: The account type can't be used for the resource you're trying to access.

第二个:

AADSTS500208: The domain is not a valid login domain for the account type.

我进行了研究,但只找到了来自 Microsoft 的示例,这些示例将 OBO 流程用于 Graph,而不是用于自己的 API。此外,我还不确定 Microsoft.Identity.Web 是否有库支持。 有 IDownstreamAPI 包,但我没有让它工作,另外我需要通过 HttpClientFactory 让它工作,而不是使用 IDownstreamAPI 接口(interface),这使得它很难与其他库一起使用。因此,我首先手动尝试了该流程,以确保其正常工作,并且我正确设置了所有内容。

很高兴获得任何提示或代码示例。

最佳答案

如果应用程序未配置为对个人帐户进行身份验证,通常会出现错误“AADSTS500208:该域不是该帐户类型的有效登录域”

因此,将 Azure AD B2C 应用程序注册为“任何身份提供商或组织目录中的帐户(用于通过用户流对用户进行身份验证)”,如下所示:

enter image description here

Note that: As you are making use of OBO flow, Azure AD B2C doesn't support OBO flow. Check this GitHub blog by svrooij.

因此您会收到错误“AADB2C99075:未为此租户启用“代表”功能”

作为解决方法,请在 Azure AD 应用程序上使用客户端凭据流,或通过 Azure B2C 身份验证 token 进行连接,并在内部 API 中对其进行验证。

https://login.microsoftonline.com/TenantID/oauth2/v2.0/token

client_id:ClientID
client_secret:ClientSecret
scope:api://xxx/.default
grant_type:client_credentials

enter image description here

关于c# - BFF 到带有 AAD/Entra ID B2C 的内部 API (.NET/ASP.NET Core/Identity.Web),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77756725/

相关文章:

c# - 如何播放音频文件 - .NET MAUI

permissions - 将角色声明作为权限的推荐最佳实践

c++ - 无法使用 QOAuth2AuthorizationCodeFlow 实现 Google 登录

C# 从列表中递归创建 TreeView

c# - 如何确认邮件是否已送达?

c# - 在详细部分删除 Crystal 报告中的额外行

azure - oidc-client:Vue.js SPA 中 IFrame 超时而没有响应

c# - protobuf-net AddField 忽略 IgnoreListHandling

c# - 强制 MessageBox.Show 显示在顶部

c# - 每个服务端点的 HttpClient 实例