通过OAuth 2.0获取访问令牌时出现invalid_grant错误

时间:2015-06-18 17:38:57

标签: python python-2.7 oauth oauth-2.0

有一个python应用程序使用Health Graph API

# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response, redirect
from main.settings import CLIENT_ID, CLIENT_SECRET, RUNKEEPER_LOGIN_URL, ACCESS_TOKEN_URL
import requests


def index(request):
    return render_to_response('index.html')

def login(request):
    code = request.GET['code']
    post_data = {'grant_type': 'authorization_code',
                 'code': code,
                 'client_id': CLIENT_ID,
                 'client_secret': CLIENT_SECRET,
                 'redirect_uri': 'http://127.0.0.1:8000/welcome/'}

    req = requests.post(ACCESS_TOKEN_URL, data=post_data)

我的登录按钮,将用户重定向到健康图登录页面,让我的应用等待授权码。

<a href="https://runkeeper.com/apps/authorize?redirect_uri=http%3A%2F%2F127.0.0.1%3A8000%2Flogin&response_type=code&client_id=xxxxxxxxx">

当我尝试通过调用登录功能获取访问令牌时,我获得了无效授权&#39;作为请求的错误。我试图替换'authorization_code&#39;换句话说,我得到了另一个不受支持的拨款类型&#39;错误。换句话说,令牌服务器拒绝我从auth服务器获取的代码。我做错了什么?

1 个答案:

答案 0 :(得分:4)

重定向到授权端点的redirect_uri与您在令牌端点交换login的{​​{1}}函数中使用的code不同。正如http://developer.runkeeper.com/healthgraph/getting-started(&#34;将您的应用程序连接到用户的健康图表帐户&#34;,子弹3)规定的文档一样,它应该完全匹配:

  

redirect_uri:您向用户发送时提供的确切网址   

上面的授权端点