LinkedIn API授权异常:scope未授权与code参数缺失问题求助
确认产品与scope的对应关系
- 登录LinkedIn开发者后台,进入应用的「Products」标签,确保已添加正确的产品(如「Sign In with LinkedIn」),且状态为「Added」。
- 注意:
r_basicprofile、r_emailaddress是旧版API的scope,新版API对应profile、email,混用旧scope会直接触发unauthorized_scope_error。务必使用当前产品支持的官方scope。
严格匹配回调URL
- 应用后台「Auth」标签下的「Redirect URLs」必须和Flask代码中的回调URL完全一致,包括协议(http/https)、端口、路径。例如代码中是
http://localhost:5000/callback,后台配置就不能写成http://127.0.0.1:5000/callback或省略端口。 - 本地测试时,避免使用localhost的别名,保持和配置的URL完全一致,否则LinkedIn不会返回code参数。
- 应用后台「Auth」标签下的「Redirect URLs」必须和Flask代码中的回调URL完全一致,包括协议(http/https)、端口、路径。例如代码中是
检查代码中的授权请求参数
- 确保授权URL中
scope参数用空格分隔多个权限,格式为scope="profile email",不要用逗号或其他分隔符。 - 确认请求包含
response_type="code"参数,这是获取授权码的必要条件,缺失的话LinkedIn不会返回code。 - 打印生成的授权URL,检查scope拼写是否正确,没有多余字符或拼写错误。
- 确保授权URL中
验证权限的授权状态
- 进入应用后台「Auth」标签的「Scopes」列表,确认你使用的scope旁边标注「Authorized」。如果是「Pending」或「Rejected」,说明需要提交审核才能使用。
- 测试阶段可使用「Test Users」功能,添加自己的账号为测试用户,测试用户无需审核即可使用已添加产品的所有scope。
排查回调路由的参数接收
- 回调路由中必须用
request.args.get('code')获取授权码,因为LinkedIn通过GET方式传递该参数,不要误用request.form。 - 确保回调路由的定义没有额外的参数限制,比如
@app.route('/callback')要保持简洁,避免路由参数覆盖查询参数。
- 回调路由中必须用
清除浏览器缓存与会话
- 旧的授权会话缓存可能导致异常,用浏览器隐身模式测试,或清除Cookie和缓存后重新发起授权请求。
内容的提问来源于stack exchange,提问作者Joaquin Carretero Martinez
相关产品推荐
相关产品推荐

