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

关于Authlib中client_kwargs的audience参数未生效的技术咨询

关于Authlib中client_kwargs不支持audience参数的问题解答

嘿,我刚好对这个问题有点了解,来跟你梳理下:

首先,你遇到的情况是真实存在的——在Authlib的oauth.register或者AUTHLIB_OAUTH_CLIENTS配置里的client_kwargs中设置audience时,这个参数并不会自动被带到授权URI里,只有scope这种标准OAuth2参数能正常生效,而且这个问题在0.12.1和0.13.dev0版本里都存在。

背后的原因

Authlib的客户端框架在处理client_kwargs的时候,默认只认OAuth2规范里定义的标准参数(比如scope),而audience是像Atlassian这类服务商自定义的扩展参数,不在Authlib默认的自动处理范围内,所以配置了也不会生效。

你的临时方案完全可行

你提到的在oauth.atlassian.authorize_redirect里直接传入audience="api.atlassian.com"是目前最直接的解决办法,因为authorize_redirect方法会把你传入的额外参数直接附加到授权请求的URI上。

实现配置化的两种思路

如果你想让audience能像scope一样通过client_kwargs配置生效,有两个方向可以尝试:

  • 建议官方优化文档:你可以去Authlib的代码仓库提个Issue,请求官方在文档里明确标注client_kwargs支持的标准参数列表,同时说明扩展参数的处理方式,这样后续开发者就不会踩同样的坑了。
  • 自定义客户端类实现:自己写个客户端类,重写授权URL生成的逻辑,把audience从client_kwargs里提取出来加到请求参数中,示例代码如下:
    from authlib.integrations.django_client import OAuth2Client
    
    class AtlassianCustomClient(OAuth2Client):
        def create_authorization_url(self, redirect_uri=None, **kwargs):
            # 从client_kwargs里取出audience
            audience = self.client_kwargs.get('audience')
            if audience:
                kwargs['audience'] = audience
            # 调用父类方法生成授权URL
            return super().create_authorization_url(redirect_uri, **kwargs)
    
    然后注册客户端的时候指定这个自定义类:
    oauth.register(
        name='atlassian',
        client_cls=AtlassianCustomClient,
        client_id='你的客户端ID',
        client_secret='你的客户端密钥',
        client_kwargs={
            'scope': 'read:jira-work',
            'audience': 'api.atlassian.com'
        },
        # 其他必要配置...
    )
    
    这样以后只要在client_kwargs里配置audience,它就会自动被带到授权URI里了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:50:54