如何为Authlib Python库的OAuth客户端禁用SSL验证?
解决Authlib连接Keycloak时SSL证书验证失败的问题
问题原因
你遇到的错误是因为Authlib在请求Keycloak的/.well-known/uma2-configuration元数据时,默认会验证SSL证书,而你的Keycloak使用自签名证书,导致验证失败。create_authorization_url里的verify=False参数仅作用于授权请求,无法覆盖元数据请求的SSL验证配置。
解决方案
方案1:注册客户端时全局禁用SSL验证
在注册OAuth客户端时,将verify=False加入client_kwargs,该客户端发起的所有请求(包括元数据请求)都会跳过SSL验证:
from authlib.integrations.flask_client import OAuth oauth_client = OAuth() oauth_client.register( name=_configuration.oauht2_provider, client_id=_configuration.oauth2_client_id, client_secret=_configuration.oauth2_client_secret, authorize_url=_configuration.oauht2_authorize_url, authorize_params=_configuration.oauht2_authorize_params, refresh_token_url=_configuration.oauht2_refresh_token_url, refresh_token_params=_configuration.oauht2_refresh_token_param, access_token_url=_configuration.oauht2_access_token_url, access_token_params=_configuration.oauht2_access_token_params, client_kwargs={ "scope": _configuration.oauht2_scope, "verify": False # 添加此行禁用SSL验证 }, server_metadata_url=_configuration.oauht2_open_id_url) oauth_client.init_app(app=_app) _oauth_client = oauth_client.create_client(_configuration.oauht2_provider) redirect_url = _oauth_client.create_authorization_url(_configuration.oauth2_client_redirect_url)['url']
方案2:针对已创建的客户端单独配置
如果不想全局禁用,可在创建客户端后直接修改其底层session的验证规则:
_oauth_client = oauth_client.create_client(_configuration.oauht2_provider) # 禁用该客户端所有请求的SSL验证 _oauth_client.session.verify = False redirect_url = _oauth_client.create_authorization_url(_configuration.oauth2_client_redirect_url)['url']
注意事项
- 禁用SSL验证仅适合开发测试环境,生产环境请务必配置合法SSL证书,或将自签名证书添加到系统信任列表,避免安全风险。
- 若已配置
server_metadata_url,Authlib会自动请求元数据覆盖手动配置的authorize_url、access_token_url等参数,请确保元数据URL正确。
内容的提问来源于stack exchange,提问作者Wal D
相关产品推荐
相关产品推荐

