如何在Django上的Authlib中添加自定义头

2024-06-01 00:47:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要你的帮助,用Django改编Authlib

我正在尝试使用OpenId和Authlib来开发一个Django应用程序来连接我的用户,并且面临访问令牌的问题,出现了问题无效的\u客户端。通过使用Postman,我发现OpenId提供者需要在标题中包含一些参数,如“Content Length”或“Host”

当Header参数在client.py中定义时,它就像一个符咒。但是,我想从views.py传递自定义头(主要是为了避免在包中直接定义主机),但是authorize\u access\u令牌不允许多个参数

def auth(request):
    token = oauth.customprovider.authorize_access_token(request)

也许“非标准合规性修复”功能会有所帮助,但我无法将其应用于Django和Header参数 https://docs.authlib.org/en/stable/client/oauth2.html#compliance-fix-oauth2

from authlib.common.urls import add_params_to_uri, url_decode

def _non_compliant_param_name(url, headers, data):
    params = {'site': 'stackoverflow'}
    url = add_params_to_uri(url, params)
    return url, headers, body

def _fix_token_response(resp):
    data = dict(url_decode(resp.text))
    data['token_type'] = 'Bearer'
    data['expires_in'] = int(data['expires'])
    resp.json = lambda: data
    return resp

session.register_compliance_hook(
    'protected_request', _non_compliant_param_name)
session.register_compliance_hook(
    'access_token_response', _fix_token_response)

有人知道如何将自定义头传递给Authlib或使用Compliance Fix和Django定义它吗


Tags: djangotokenurldata参数定义accessresponse