自定义应用到ADB2C应用的单点登录实现咨询
可行方案与实现指导
将你的Web应用配置为Azure AD B2C的自定义OIDC身份提供商是完全可行的,这正是实现联邦认证直通的标准路径。以下是具体落地步骤:
核心思路
你的Web应用作为OIDC身份提供商(IdP),Azure AD B2C作为身份代理层:用户在你的Web应用登录后,访问第三方SaaS时,ADB2C会自动向你的Web应用发起身份验证请求,复用已有会话获取身份断言,无需用户重复登录,最终完成SaaS的自动认证。
步骤1:确保你的Web应用符合OIDC标准
你的Web应用需要暴露OIDC协议要求的核心端点:
- 授权端点:接收ADB2C的授权请求,处理用户身份验证
- 令牌端点:发放签名后的ID Token/Access Token
- JWKS端点:提供用于验证令牌的公钥集合(ADB2C会通过此端点获取公钥,验证你发放的ID Token合法性)
- 用户信息端点(可选):用于补充获取用户属性
同时要确保:
- 支持
openid基础范围,可选profile/email等扩展范围 - ID Token使用RS256算法签名(ADB2C推荐的安全算法)
- ID Token包含必填声明:
iss(你的Web应用域名)、sub(用户唯一标识)、aud(ADB2C的客户端ID)、exp(令牌过期时间)、iat(令牌签发时间)
步骤2:在Azure AD B2C中配置自定义OIDC身份提供商
- 登录Azure门户,进入你的ADB2C租户
- 导航到身份提供商 → 选择新建OpenID Connect提供商
- 填写基础配置:
- 名称:自定义标识(比如“我的Web应用身份源”)
- 元数据URL:如果你的Web应用支持OIDC元数据(通常是
https://你的域名/.well-known/openid-configuration),直接填写;否则手动输入授权端点、令牌端点、JWKS端点的URL - 客户端ID:在你的Web应用中注册ADB2C时生成的客户端ID(用于ADB2C向你的Web应用发起请求的身份标识)
- 客户端密钥:对应客户端ID的密钥,需在你的Web应用中提前配置
- 配置范围:至少勾选
openid,按需添加profile等 - 声明映射:将你的Web应用ID Token中的声明映射到ADB2C的用户属性,比如:
- 把
sub映射到ADB2C的objectId - 把
name映射到ADB2C的displayName - 把
email映射到ADB2C的email
- 把
步骤3:配置ADB2C用户流/自定义策略实现自动直通
用用户流(适合快速落地)
- 创建或修改一个登录用户流(比如SignUpSignIn类型)
- 在用户流的身份提供商设置中,添加你刚配置的自定义OIDC身份提供商
- 启用单一登录(SSO):在用户流的属性设置中,开启SSO会话,确保ADB2C会重用已有身份断言,避免重复验证
- 测试用户流:访问用户流的测试端点,确认能正常跳转到你的Web应用完成认证,且认证后ADB2C能正确获取用户信息
用自定义策略(适合复杂场景)
在自定义策略的TrustFrameworkExtensions.xml中添加自定义OIDC IdP的技术配置,关键是设置SSO会话参数:
<ClaimsProvider> <Domain>your-web-app-domain</Domain> <DisplayName>你的Web应用</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="OIDC-YourWebApp"> <DisplayName>你的Web应用</DisplayName> <Protocol Name="OpenIdConnect"/> <Metadata> <Item Key="METADATA">https://你的域名/.well-known/openid-configuration</Item> <Item Key="client_id">ADB2C的客户端ID</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <Item Key="response_mode">form_post</Item> <Item Key="HttpBinding">POST</Item> <Item Key="UsePolicyInRedirectUri">false</Item> <Item Key="SingleSignOnEnabled">true</Item> <!-- 启用SSO --> </Metadata> <CryptographicKeys> <Key Id="client_secret" StorageReferenceId="B2C_1A_YourWebAppClientSecret"/> </CryptographicKeys> <OutputClaims> <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub"/> <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="name"/> <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="email"/> </OutputClaims> <OutputClaimsTransformations> <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/> <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/> <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/> </OutputClaimsTransformations> <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
步骤4:在你的Web应用中处理ADB2C的授权请求
当ADB2C重定向到你的Web应用授权端点时,执行以下逻辑:
- 检查当前用户是否已在你的Web应用登录:
- 若已登录:直接生成符合ADB2C要求的ID Token,签名后通过回调URL返回给ADB2C
- 若未登录:跳转到你的Web应用登录页面,登录完成后再生成ID Token返回
- 确保会话Cookie的跨域可用性:如果你的Web应用和ADB2C域名不同,需将Cookie的
SameSite属性设置为None,同时启用HTTPS,否则跨域请求无法携带会话Cookie,导致无法自动直通
步骤5:集成第三方SaaS应用
- 在ADB2C中注册该SaaS应用:设置重定向URL、允许的范围(比如
openid)、权限等 - 用户访问SaaS集成页面时,你的Web应用构造ADB2C授权请求URL,参数包括:
client_id:SaaS应用在ADB2C中的客户端IDresponse_type:coderedirect_uri:SaaS应用的回调URLscope:openid+ SaaS所需的其他范围p:你配置的用户流/自定义策略名称
- 用户被重定向到ADB2C后,ADB2C会自动调用你的自定义OIDC IdP获取身份,复用已有会话完成认证,最终发放令牌给SaaS,实现自动登录
内容的提问来源于stack exchange,提问作者user14013917
相关产品推荐
相关产品推荐

