Linkedin认证给出无效的redirect_uri

时间:2017-06-03 13:44:10

标签: python oauth-2.0 python-requests linkedin

我使用linkedin身份验证API登录我的网站用户。

首先,我重定向到以下网址:

https://www.linkedin.com/oauth/v2/authorization?' \
      'response_type=code' \
      '&client_id=*****' \
      '&redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Faccounts%2Flinkedin%2Fcallback%3Fnext%3D%2Fhome' \
      '&state=123456789' \
      '&scope=r_basicprofile%20r_emailaddress'

成功重定向到linkedin身份验证对话框。在接受为linkedin app授予权限后,用户成功重定向到redirect_uri并附加了code param。

之后我发送了一个POST请求,如下所示:

requests.post(
    'https://www.linkedin.com/oauth/v2/accessToken',
    data={
        'grant_type': 'authorization_code',
        'code': returned code in previous step,
        'redirect_uri': 'http%3A%2F%2F127.0.0.1%3A8000%2Faccounts%2Flinkedin%2Fcallback%3Fnext%3D%2Fhome',
        'client_id': ****,
        'client_secret': settings.LINKEDIN_CLIENT_SECRET,
    }
)

但是这个请求没有成功,我也不知道为什么!以下是linkedin返回的回复:

{'error': 'invalid_redirect_uri', 'error_description': 'Unable to retrieve access token: appid or redirect uri or code verifier does not match authorization code or authorization code expired'}

如您所见,redirect_uri在两个请求中都相同......

1 个答案:

答案 0 :(得分:4)

在您的令牌请求中,您提供POST数据中重定向URI的URL编码值,但requests.post将自动对data对象中的键/值对进行URL编码。因此,该值到达服务器双重编码,因此与授权请求中发送的原始值不匹配;服务器响应invalid_redirect_uri

您需要发送

    'redirect_uri': 'http://127.0.0.1:8000/accounts/linkedin/callback?next=/home',