使用Authlib与FastAPI实现LinkedIn登录时获取令牌报错求助
解决LinkedIn + Authlib获取令牌时"client_secret缺失"的问题
问题分析
你遇到的错误是因为LinkedIn的OAuth2令牌接口不支持默认的HTTP Basic认证方式,它要求client_id和client_secret作为POST表单参数传递,而Authlib默认会把客户端凭证放在HTTP请求头里,导致LinkedIn无法识别client_secret参数。
解决方案
修改oauth.register中的client_kwargs,添加auth_method: 'client_secret_post'配置,强制Authlib通过POST表单传递客户端凭证:
oauth.register( "linkedin", client_id=LINKEDIN_CLIENT_ID, client_secret=LINKEDIN_CLIENT_SECRET, api_base_url='https://api.linkedin.com/v2/', authorize_url='https://www.linkedin.com/oauth/v2/authorization', access_token_url='https://www.linkedin.com/oauth/v2/accessToken', client_kwargs={ 'scope': 'openid profile email', # 关键配置:指定用POST表单传递客户端凭证 'auth_method': 'client_secret_post' }, )
额外验证点
- 确认
LINKEDIN_CLIENT_SECRET配置值不为空,且和LinkedIn开发者后台的密钥完全一致 - 确认回调地址
redirect_uri和LinkedIn应用后台配置的授权重定向URL完全匹配(包括HTTP/HTTPS、域名、路径)
内容的提问来源于stack exchange,提问作者TeeWhy
相关产品推荐
相关产品推荐

