我有一个 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 应用程序注册为“任何身份提供商或组织目录中的帐户(用于通过用户流对用户进行身份验证)”,如下所示:
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
关于c# - BFF 到带有 AAD/Entra ID B2C 的内部 API (.NET/ASP.NET Core/Identity.Web),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77756725/