Azure AD B2C联合SAML IDP发起式登录配置问题咨询
问题背景
我们的Web应用已通过OIDC成功对接Azure AD B2C,可与Github、本地账户等内置身份提供商(IDP)正常协作。应客户需求,我们通过B2C自定义策略集成了其SAML IDP,支持从Web应用跳转至B2C再到SAML IDP的登录流程。
现在需要实现IDP发起式登录:由客户的SAML IDP发送SAML断言以自动完成用户登录。测试中发现,用户携带SAML断言跳转回B2C后,B2C无法继续后续流程。我们需要将该SAML断言转换为OIDC令牌返回给Web应用以完成登录,但根据社区及官方文档,B2C似乎不支持此场景。
问题清单
- IDP发起式登录是SAML标准功能,其他企业如何解决该需求?
- 当前方案是否可行?是否需要移除B2C?有无替代方案?
- 为Web应用同时配置SAML与OIDC是否可行?
Azure AD B2C返回的错误信息
Policy 'B2C_1A_MockSAMLSOO' in tenant '*****.onmicrosoft.com' does not have a supported relying party protocol
当前依赖方配置
<RelyingParty> <DefaultUserJourney ReferenceId="CustomSignUpOrSignIn" /> <Endpoints> <!--points to refresh token journey when app makes refresh token request--> <Endpoint Id="Token" UserJourneyReferenceId="RedeemRefreshToken" /> </Endpoints> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect" /> <OutputClaims> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name" /> <OutputClaim ClaimTypeReferenceId="givenName" /> <OutputClaim ClaimTypeReferenceId="surname" /> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="emails" /> <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub"/> <OutputClaim ClaimTypeReferenceId="identityProvider" /> <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" /> </OutputClaims> <SubjectNamingInfo ClaimType="sub" /> </TechnicalProfile> </RelyingParty>
解答
1. 其他企业的常见解决方案
多数企业会通过两种路径解决:
- 中间代理层:在SAML IDP和B2C之间搭建身份代理服务,先接收SAML断言,再以OIDC客户端身份触发B2C的授权流程,将用户身份转换为OIDC令牌返回给Web应用。代理层可基于IdentityServer、Auth0等工具快速搭建,或自行开发轻量服务。
- 反向流程适配:让SAML IDP发起的断言先定向到Web应用,由Web应用触发B2C的OIDC登录流程,同时将SAML断言中的用户信息通过自定义参数或会话传递给B2C,B2C验证后直接颁发令牌。这种方式需要修改Web应用的登录逻辑,配合B2C自定义策略处理传入的用户信息。
2. 当前方案的可行性与替代方案
当前直接让B2C处理SAML发起的断言并转换为OIDC令牌的方案不可行——B2C自定义策略的依赖方仅支持OIDC/SAML作为对外协议,但不支持从SAML IDP发起的断言直接触发OIDC令牌颁发(错误提示也明确了策略的依赖方协议不匹配)。
不需要移除B2C,推荐两种替代方案:
- 采用中间代理层方案,保留B2C作为核心身份管理节点,代理层负责完成SAML到OIDC的格式转换流程。
- 修改B2C自定义策略,添加专门的SAML依赖方配置,让Web应用同时支持SAML和OIDC流程(对应第三个问题),此时SAML IDP发起的断言直接发给B2C的SAML端点,B2C返回SAML令牌给Web应用,由应用自行处理两种令牌格式。
3. Web应用同时配置SAML与OIDC的可行性
完全可行。Web应用可同时注册为B2C的OIDC客户端和SAML服务提供商,分别处理两种登录流程:
- OIDC流程:保留现有对接逻辑,用于Github、本地账户等IDP的登录。
- SAML流程:在B2C中添加使用SAML协议的依赖方技术配置文件,Web应用配置对应的SAML断言消费者端点(ACS),接收B2C返回的SAML令牌并完成登录。
需要注意的是,Web应用需实现两种令牌的解析和用户身份映射逻辑,确保无论通过哪种方式登录,用户信息在应用内保持一致。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

