使用Quarkus OpenId Connect对接Azure B2C时OIDC服务器不可用问题排查求助
解决Quarkus集成Azure B2C时OIDC服务器不可用的问题
嘿,你遇到的这个问题其实是Quarkus OIDC配置里的常见小坑——你把auth-server-url指向了授权端点,但Quarkus需要的是OpenID Connect的元数据端点。
让我给你拆解清楚:
Quarkus的OIDC扩展启动时,会自动去auth-server-url指定的地址拉取核心OIDC元数据(比如密钥集、令牌端点这些关键配置),但你现在填的是/oauth2/v2.0/authorize?p={policy}——这是用户跳转登录的授权页面URL,根本不是元数据接口,Quarkus自然找不到正确的OIDC配置,所以才会报错“服务器不可用”。
正确的配置方式
Azure B2C的OIDC元数据端点格式是固定的,你需要把quarkus.oidc.auth-server-url改成:
quarkus.oidc.auth-server-url=https://{tenant}.b2clogin.com/{tenant}.onmicrosoft.com/{policy}/v2.0/.well-known/openid-configuration
记得把{tenant}换成你的Azure B2C租户名称,{policy}换成你使用的用户流/自定义策略名称(比如B2C_1_signupsignin1)。
补充几个关键配置点
因为你设置了application-type=service(服务端应用),还需要加上客户端凭证的配置,不然Quarkus没法和Azure B2C完成身份验证:
# 替换成你的Azure B2C应用注册里的客户端ID quarkus.oidc.credentials.client-id=your-client-id # 替换成应用注册里生成的客户端密钥 quarkus.oidc.credentials.secret=your-client-secret
另外,你代码里用了@RolesAllowed("test"),这里要注意:Azure B2C默认的角色声明可能不是roles,如果你的令牌里角色存在于其他字段(比如extension_roles),需要加上角色映射配置:
quarkus.oidc.roles.role-claim-path=extension_roles # 根据你的实际声明调整
修正后的完整配置示例
quarkus.oidc.auth-server-url=https://your-tenant.b2clogin.com/your-tenant.onmicrosoft.com/B2C_1_signupsignin1/v2.0/.well-known/openid-configuration quarkus.oidc.application.application-type=service quarkus.oidc.credentials.client-id=your-client-id quarkus.oidc.credentials.secret=your-client-secret quarkus.http.auth.permission.authenticated.paths=/hello/* quarkus.http.auth.permission.authenticated.policy=authenticated quarkus.oidc.roles.role-claim-path=roles quarkus.log.category."io.quarkus.oidc".level= DEBUG
验证步骤
- 确认所有占位符(租户、策略、客户端ID/密钥)都替换成了实际值
- 重启Quarkus应用,查看DEBUG日志,应该能看到Quarkus成功获取到Azure B2C的OIDC元数据
- 用Azure B2C颁发的包含
test角色的JWT令牌调用/hello接口,应该能正常返回结果
内容的提问来源于stack exchange,提问作者TheQuestioner
相关产品推荐
相关产品推荐

