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

如何配置Omniauth对接Azure B2C实现OpenID Connect隐式流登录

你提出的host搭配自定义authorization_endpoint的配置方式是可行的,但手动维护所有OIDC端点容易出现路径拼写错误,更推荐直接使用Azure B2C兼容的OIDC发现端点自动完成配置,以下是具体方案:

方案1:手动指定端点配置

你设想的配置逻辑完全可以正常工作,需要注意的是,除了授权端点外,你还需要手动补全token端点、用户信息端点、公钥端点这几个必填配置,否则插件默认基于host拼接的路径不符合Azure B2C的路由规则。
其中公钥端点(jwks_uri)的路径前缀和其他接口不同,必须填写完整绝对地址,不能用相对路径。

config.omniauth :openid_connect, {
  name: :azure_b2c,
  scope: [:openid],
  response_type: :id_token,
  # Azure B2C默认返回sub作为用户唯一标识,若要使用preferred_username需要提前在B2C用户流的应用声明中开启该字段返回
  uid_field: "sub",
  client_options: {
    port: 443,
    scheme: "https",
    host: "<your-tenant-name>.b2clogin.com",
    identifier: ENV["AZURE_B2C_CLIENT_ID"],
    redirect_uri: "http://yourapp.com/users/auth/azure_b2c/callback",
    # 路径内嵌策略ID的端点配置
    authorization_endpoint: "/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/oauth2/v2.0/authorize",
    token_endpoint: "/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/oauth2/v2.0/token",
    userinfo_endpoint: "/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/oauth2/v2.0/userinfo",
    jwks_uri: "https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/discovery/v2.0/keys"
  },
  # 如果你选择使用带p参数的基础端点格式,注释掉上面路径中带策略ID的部分,改用基础路径,同时开启下面的参数配置即可
  # authorize_params: { p: "<your-policy-id>" }
}

方案2:使用OIDC发现端点自动配置(推荐)

Azure B2C完全兼容OpenID Connect发现规范,你只需要指定对应策略的发现端点,插件会在启动时自动拉取所有授权、token、公钥、用户信息等端点配置,不需要手动逐个填写,能避免绝大多数路径配置错误。
Azure B2C对应指定策略的发现端点固定格式为:
https://<your-tenant-name>.b2clogin.com/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/v2.0/.well-known/openid-configuration
对应的最简隐式流配置如下:

config.omniauth :openid_connect, {
  name: :azure_b2c,
  scope: [:openid],
  response_type: :id_token,
  uid_field: "sub",
  discovery: true, # 开启端点自动发现能力
  client_options: {
    port: 443,
    scheme: "https",
    host: "<your-tenant-name>.b2clogin.com",
    identifier: ENV["AZURE_B2C_CLIENT_ID"],
    redirect_uri: "http://yourapp.com/users/auth/azure_b2c/callback",
    discovery_endpoint: "/<your-tenant-name>.onmicrosoft.com/<your-policy-id>/v2.0/.well-known/openid-configuration"
  }
}

配置注意事项

  • 隐式流场景下,必须提前进入Azure B2C的应用注册配置页,在「隐式流和混合流」配置块中勾选ID 令牌选项,否则授权端点不会返回合法的id_token,会直接触发回调报错。
  • 如果需要获取用户邮箱、显示名等额外信息,除了在scope参数中添加对应权限外,还需要在对应B2C用户流策略的「应用声明」配置中勾选需要返回的字段,否则对应信息不会出现在id_token或用户信息接口返回中。
  • 所有B2C相关接口请统一使用<tenant-name>.b2clogin.com域名,不要使用旧版login.microsoftonline.com域名,避免后续出现兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:57:25