Django+social-auth-app-django集成LinkedIn授权报错求可用配置示例
你的核心问题是误用了LinkedIn旧版API的scope(比如r_basicprofile),但当前应用启用的是Sign In with LinkedIn using OpenID Connect产品,必须使用OpenID标准的scope,同时要对应最新的字段映射规则。
下面是可用的settings.py配置示例:
# LinkedIn OpenID Connect 核心配置 SOCIAL_AUTH_LINKEDIN_OAUTH2_KEY = '你的Client ID' # 替换为实际获取的Client ID SOCIAL_AUTH_LINKEDIN_OAUTH2_SECRET = '你的Client Secret' # 替换为实际获取的Client Secret # OpenID Connect 标准必填scope,必须包含这三个 SOCIAL_AUTH_LINKEDIN_OAUTH2_SCOPE = ['openid', 'profile', 'email'] # 对应LinkedIn OpenID返回的字段(弃用旧版的formatted-name等字段名) SOCIAL_AUTH_LINKEDIN_OAUTH2_FIELD_SELECTORS = [ 'name', 'email', 'picture', 'profile' ] # 字段映射:LinkedIn返回字段 → Django用户模型字段/extra_data存储键 SOCIAL_AUTH_LINKEDIN_OAUTH2_EXTRA_DATA = [ ('sub', 'id'), # OpenID标准的用户唯一标识是sub,而非旧版的id ('name', 'name'), ('email', 'email'), ('picture', 'picture_url'), ('profile', 'profile_url'), ] # 可选配置:生产环境建议开启HTTPS强制跳转 # SOCIAL_AUTH_REDIRECT_IS_HTTPS = True
关键注意事项:
- 确认LinkedIn应用后台已添加Sign In with LinkedIn using OpenID Connect产品,并且在该产品的设置页面,将你的Django应用重定向URI(比如本地调试用
http://localhost:8000/complete/linkedin-oauth2/,生产环境替换为实际域名)添加到「Authorized redirect URLs for your app」列表中。 - 旧版的
r_basicprofile、r_emailaddress等scope属于LinkedIn REST API产品,和OpenID Connect产品不兼容,必须完全弃用。 - 配置正确后,social-auth-app-django的LinkedIn OAuth2后端会自动适配OpenID流程,不会再请求旧的
r_liteprofile等未授权scope。
内容的提问来源于stack exchange,提问作者Kimonode
相关产品推荐
相关产品推荐

