perf: OAuth2协议获取token支持配置json或者data (#12602)

* perf: OAuth2协议获取token支持配置json或者data

* perf: 优化注释

---------

Co-authored-by: jiangweidong <weidong.jiang@fit2cloud.com>
pull/12592/head
fit2bot 2024-01-25 14:00:13 +08:00 committed by GitHub
parent 77569c554b
commit 00256f86df
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 5 deletions

View File

@ -98,16 +98,19 @@ class OAuth2Backend(JMSModelBackend):
access_token_url = '{url}{separator}{query}'.format( access_token_url = '{url}{separator}{query}'.format(
url=settings.AUTH_OAUTH2_ACCESS_TOKEN_ENDPOINT, separator=separator, query=urlencode(query_dict) url=settings.AUTH_OAUTH2_ACCESS_TOKEN_ENDPOINT, separator=separator, query=urlencode(query_dict)
) )
# token_method -> get, post(post_data), post_json
token_method = settings.AUTH_OAUTH2_ACCESS_TOKEN_METHOD.lower() token_method = settings.AUTH_OAUTH2_ACCESS_TOKEN_METHOD.lower()
requests_func = getattr(requests, token_method, requests.get)
logger.debug(log_prompt.format('Call the access token endpoint[method: %s]' % token_method)) logger.debug(log_prompt.format('Call the access token endpoint[method: %s]' % token_method))
headers = { headers = {
'Accept': 'application/json' 'Accept': 'application/json'
} }
if token_method == 'post': if token_method.startswith('post'):
access_token_response = requests_func(access_token_url, headers=headers, data=query_dict) body_key = 'json' if token_method.endswith('json') else 'data'
access_token_response = requests.post(
access_token_url, headers=headers, **{body_key: query_dict}
)
else: else:
access_token_response = requests_func(access_token_url, headers=headers) access_token_response = requests.get(access_token_url, headers=headers)
try: try:
access_token_response.raise_for_status() access_token_response.raise_for_status()
access_token_response_data = access_token_response.json() access_token_response_data = access_token_response.json()

View File

@ -43,7 +43,7 @@ class OAuth2SettingSerializer(serializers.Serializer):
) )
AUTH_OAUTH2_ACCESS_TOKEN_METHOD = serializers.ChoiceField( AUTH_OAUTH2_ACCESS_TOKEN_METHOD = serializers.ChoiceField(
default='GET', label=_('Client authentication method'), default='GET', label=_('Client authentication method'),
choices=(('GET', 'GET'), ('POST', 'POST')) choices=(('GET', 'GET'), ('POST', 'POST-DATA'), ('POST_JSON', 'POST-JSON'))
) )
AUTH_OAUTH2_PROVIDER_USERINFO_ENDPOINT = serializers.CharField( AUTH_OAUTH2_PROVIDER_USERINFO_ENDPOINT = serializers.CharField(
required=True, max_length=1024, label=_('Provider userinfo endpoint') required=True, max_length=1024, label=_('Provider userinfo endpoint')