You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义应用到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身份提供商

  1. 登录Azure门户,进入你的ADB2C租户
  2. 导航到身份提供商 → 选择新建OpenID Connect提供商
  3. 填写基础配置:
    • 名称:自定义标识(比如“我的Web应用身份源”)
    • 元数据URL:如果你的Web应用支持OIDC元数据(通常是https://你的域名/.well-known/openid-configuration),直接填写;否则手动输入授权端点、令牌端点、JWKS端点的URL
    • 客户端ID:在你的Web应用中注册ADB2C时生成的客户端ID(用于ADB2C向你的Web应用发起请求的身份标识)
    • 客户端密钥:对应客户端ID的密钥,需在你的Web应用中提前配置
  4. 配置范围:至少勾选openid,按需添加profile等
  5. 声明映射:将你的Web应用ID Token中的声明映射到ADB2C的用户属性,比如:
    • 把sub映射到ADB2C的objectId
    • 把name映射到ADB2C的displayName
    • 把email映射到ADB2C的email

步骤3:配置ADB2C用户流/自定义策略实现自动直通

用用户流(适合快速落地)

  1. 创建或修改一个登录用户流(比如SignUpSignIn类型)
  2. 在用户流的身份提供商设置中,添加你刚配置的自定义OIDC身份提供商
  3. 启用单一登录(SSO):在用户流的属性设置中,开启SSO会话,确保ADB2C会重用已有身份断言,避免重复验证
  4. 测试用户流:访问用户流的测试端点,确认能正常跳转到你的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应用授权端点时,执行以下逻辑:

  1. 检查当前用户是否已在你的Web应用登录:
    • 若已登录:直接生成符合ADB2C要求的ID Token,签名后通过回调URL返回给ADB2C
    • 若未登录:跳转到你的Web应用登录页面,登录完成后再生成ID Token返回
  2. 确保会话Cookie的跨域可用性:如果你的Web应用和ADB2C域名不同,需将Cookie的SameSite属性设置为None,同时启用HTTPS,否则跨域请求无法携带会话Cookie,导致无法自动直通

步骤5:集成第三方SaaS应用

  1. 在ADB2C中注册该SaaS应用:设置重定向URL、允许的范围(比如openid)、权限等
  2. 用户访问SaaS集成页面时,你的Web应用构造ADB2C授权请求URL,参数包括:
    • client_id:SaaS应用在ADB2C中的客户端ID
    • response_type:code
    • redirect_uri:SaaS应用的回调URL
    • scope:openid + SaaS所需的其他范围
    • p:你配置的用户流/自定义策略名称
  3. 用户被重定向到ADB2C后,ADB2C会自动调用你的自定义OIDC IdP获取身份,复用已有会话完成认证,最终发放令牌给SaaS,实现自动登录

内容的提问来源于stack exchange,提问作者user14013917

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 21:05:20