LinkedIn OAuth 2.0认证未获取refresh_token,如何获取新access_token?
解决LinkedIn OAuth 2.0未获取refresh_token时的新access_token获取问题
首先得明确:LinkedIn的refresh_token并不是默认返回的——它只会在首次授权请求中包含offline_access权限的情况下才会下发。如果你的授权请求没加这个权限,或者用户已经授权过你的应用(没有重新触发带offline_access的授权),就只会拿到access_token和expires_in。
下面分两种场景给出解决方案:
场景1:可以引导用户重新触发授权流程
这是最直接的解决方式,也是唯一能拿到refresh_token的途径:
- 修改授权请求的
scope参数,必须加入offline_access权限。比如你的scope原本是r_liteprofile email_address,要改成:
(如果是URL请求,记得对空格做URL编码,变成scope=r_liteprofile email_address offline_accessr_liteprofile%20email_address%20offline_access) - 确保用户是首次授权,或先取消现有授权:如果用户之前已经授权过你的应用,即使你加了
offline_access,LinkedIn也不会返回新的refresh_token。你需要引导用户先去LinkedIn的「设置与隐私」→「应用和网站」→「已授权的应用」里取消对你应用的授权,然后再重新走授权流程。 - 完成授权后,你就能在响应中拿到
refresh_token,之后就可以用它来刷新access_token了:发送POST请求到https://www.linkedin.com/oauth/v2/accessToken,参数包括:grant_type=refresh_token client_id=你的客户端ID client_secret=你的客户端密钥 refresh_token=拿到的刷新令牌
场景2:无法引导用户重新授权(access_token已过期且无refresh_token)
这种情况没有捷径可走——LinkedIn不支持在没有refresh_token且用户未重新授权的情况下获取新的用户级access_token。你只能:
- 提示用户重新登录授权,按照场景1的流程获取新的access_token和refresh_token;
- 如果你的应用有不需要用户上下文的操作,可以考虑使用客户端凭证流(Client Credentials Flow)获取应用级的access_token,但这种token只能访问应用自身的数据,无法访问用户的个人数据。
额外注意事项
- LinkedIn的
refresh_token目前是长期有效的,但如果用户取消了对你应用的授权、修改了LinkedIn密码,或者你的应用被LinkedIn封禁,refresh_token会立即失效; - 每次用refresh_token刷新access_token时,LinkedIn可能会返回一个新的refresh_token(虽然不是强制的),建议你用新的refresh_token替换旧的,以避免后续刷新失败。
内容的提问来源于stack exchange,提问作者Soumya Bongani
相关产品推荐
相关产品推荐

