Apache Pulsar OpenID认证:凭证正确仍报未授权,如何解决?
问题排查与解决方案
1. 检查Audience匹配问题
你的broker配置中openIDAllowedAudiences设置的是https://auth0.someweb.com/maas, https://stg.dev.auth0.com/userinfo,但broker客户端认证参数里的audience是https://auth0.someweb.com/api/v2/——这个audience不在broker允许的列表内,会直接导致授权服务器返回access_denied错误。
需要将brokerClientAuthenticationParameters里的audience修改为broker允许的其中一个值,示例:
{"privateKey":"file:///credentials/credentials_file.json","audience":"https://auth0.someweb.com/maas","issuerUrl":"https://login.someweb.com/"}
2. 关于Authorization Basic头的配置
Pulsar的AuthenticationOAuth2插件在处理client_credentials类型凭证时,会自动用client_id和client_secret生成Basic Auth头,不需要额外手动配置。你用curl能成功获取token,说明凭证本身有效,问题不在这个环节。
3. 手动覆盖Token端点URL
如果授权服务器的.well-known/openid-configuration里的token端点URL未及时更新,你可以直接指定正确的端点,有两种实现方式:
方式一:在brokerClientAuthenticationParameters中添加tokenUrl
修改broker.conf中的认证参数:
{"privateKey":"file:///credentials/credentials_file.json","audience":"https://auth0.someweb.com/maas","issuerUrl":"https://login.someweb.com/","tokenUrl":"https://login.someweb.com/正确的token端点路径"}
方式二:在credentials_file.json中添加token_url字段
更新凭证文件:
{ "type": "client_credentials", "client_id": "some.id@someweb.com", "client_secret": "somesecret", "issuer_url": "https://login.someweb.com/", "token_url": "https://login.someweb.com/正确的token端点路径" }
完成以上修改后,重启Pulsar broker和function worker,再验证认证是否正常。
内容的提问来源于stack exchange,提问作者raah
相关产品推荐
相关产品推荐

