如何在基于OIDC的ADB2C跨租户联合认证中添加查询参数
解决ADB2C跨租户联合认证中授权端点添加自定义查询参数的问题
方法1:直接指定带参数的授权端点(跳过自动发现)
如果不需要依赖OpenID Connect自动发现机制,可直接在技术配置文件的Metadata里指定完整的授权端点URL,包含所需的查询参数:
<ClaimsProvider> <Domain>your-tenant-domain.com</Domain> <DisplayName>目标ADB2C租户</DisplayName> <TechnicalProfiles> <TechnicalProfile Id="TargetB2C-OIDC"> <DisplayName>目标ADB2C租户登录</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <!-- 移除自动发现端点配置 --> <!-- <Item Key="OpenIdConnectDiscoveryEndpoint">https://target-tenant.b2clogin.com/target-tenant.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1A_signup_signin</Item> --> <!-- 直接指定带自定义参数的授权端点 --> <Item Key="authorization_endpoint">https://target-tenant.b2clogin.com/target-tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_signup_signin&customParam=requiredValue</Item> <Item Key="client_id">你的目标租户应用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> <!-- 按需添加其他元数据(如token_endpoint等) --> </Metadata> <!-- 其余配置(输入输出声明、密钥等)保持不变 --> </TechnicalProfile> </TechnicalProfiles> </ClaimsProvider>
方法2:使用ExtraQueryParameters元数据(保留自动发现)
若想继续依赖OpenID Connect自动发现,可通过ExtraQueryParameters元数据项追加自定义参数,必须注意XML中&符号要转义为&,否则会触发格式错误:
<TechnicalProfile Id="TargetB2C-OIDC"> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="OpenIdConnectDiscoveryEndpoint">https://target-tenant.b2clogin.com/target-tenant.onmicrosoft.com/v2.0/.well-known/openid-configuration?p=B2C_1A_signup_signin</Item> <Item Key="client_id">你的目标租户应用ID</Item> <!-- 追加自定义查询参数,&转义为& --> <Item Key="ExtraQueryParameters">customParam1=value1&customParam2=value2</Item> <Item Key="response_types">code</Item> <Item Key="scope">openid profile</Item> <!-- 其他元数据 --> </Metadata> </TechnicalProfile>
备选方案:改用OAuth2协议提供者
你考虑的OAuth2协议提供者方案完全可行,Azure AD B2C的授权端点支持OAuth2授权码流程,配置时直接在authorization_endpoint中携带所需参数即可:
<TechnicalProfile Id="TargetB2C-OAuth2"> <DisplayName>目标ADB2C租户登录</DisplayName> <Protocol Name="OAuth2" /> <Metadata> <Item Key="authorization_endpoint">https://target-tenant.b2clogin.com/target-tenant.onmicrosoft.com/oauth2/v2.0/authorize?p=B2C_1A_signup_signin&customParam=requiredValue</Item> <Item Key="token_endpoint">https://target-tenant.b2clogin.com/target-tenant.onmicrosoft.com/oauth2/v2.0/token?p=B2C_1A_signup_signin</Item> <Item Key="client_id">你的目标租户应用ID</Item> <Item Key="scope">openid profile</Item> <Item Key="response_type">code</Item> <Item Key="response_mode">form_post</Item> </Metadata> <!-- 其余配置(输入输出声明、密钥等) --> </TechnicalProfile>
关键注意事项
- 方法2中必须转义XML中的&符号,这是你之前直接添加参数导致XML格式错误的核心原因。
- 无论用哪种方法,都要确保目标ADB2C租户的应用注册已允许你的源租户应用发起授权请求,并且权限配置正确。
内容的提问来源于stack exchange,提问作者TheGreatApe
相关产品推荐
相关产品推荐

