Django OAuth Toolkit invalid_grant错误

时间:2014-11-21 07:32:09

标签: python django oauth

我有一点问题,我有一个使用Django OAuth Toolkit的django应用程序,在使用授权代码流时我无法从服务器获取访问令牌。隐式流程工作正常。我在堆栈上找不到关于我的问题的任何内容,所以如果这是另一个问题的副本,我真的很抱歉。

我可以使用此url进行授权并获取请求,如果我理解正确,请求令牌已经过了代码参数。

http://mydomain.se/o/authorize?scope=read+write&state=kalle&redirect_uri=mycallbakurls&response_type=code&client_id=myclientid

然后我尝试发帖http://mydomain.se/o/token/ 用:

grant_type = authorization_code
code = code from authorize call
client_id = my clientId
client_secret = my client secret
redirect_uri = my callback url 

我回来了"error" : "invalid_grant"

有人可以指出我正确的方向是什么问题吗?

最好的问候Markus

4 个答案:

答案 0 :(得分:3)

This can happen if the code is expired. They expire pretty quickly by default. You can look up your code in the Django admin under Grants and change the expiration date to far in the future.

答案 1 :(得分:1)

我发现我无法单独提出请求。当我建立自己的客户端并测试所有工作正常。

答案 2 :(得分:1)

当我的客户端类型为confidential而不是public中的o/application时,我遇到了同样的问题。这是我解决它的方式。

  1. 失败的错误讯息为{"error": "invalid_grant"}
  2. curl -X POST -d "client_id=17U5rPQM1HDtF3hR8sIRP6pmzn033EbnwJJ6lNCx& client_secret=D6bSgR8qyIwDl5SyF4kJ0wBJq56NXMUY9LVjD6NZTxnAh4ylTD2YBJxDBaLahpabZMGowWpVTYn6UW8Yq1GB6nAwm7euXZZxXaCxQLKK2KDNrfz4JSavFCKekc1LOCQz&grant_type=authorization_code&code=EaBVzVEjqbsU0GKl5gXK7ArrfsSiTJ&redirect_uri=http%3A%2F%2Flocalhost%2Foauth_client%2F" http://localhost:8080/o/token/
    {"error": "invalid_grant"}

    1. 然后将我的客户类型更改为public并获得Success
    2. curl -X POST -d "client_id=17U5rPQM1HDtF3hR8sIRP6pmzn033EbnwJJ6lNCx&client_secret=D6bSgR8qyIwDl5SyF4kJ0wBJq56NXMUY9LVjD6NZTxnAh4ylTD2YBJxDBaLahpabZMGowWpVTYn6UW8Yq1GB6nAwm7euXZZxXaCxQLKK2KDNrfz4JSavFCKekc1LOCQz&grant_type=authorization_code&code=1ZxQjLN4QbpjaWgbztnOIe3K4bgxKj&redirect_uri=http%3A%2F%2Flocalhost%2Foauth_client%2F" http://localhost:8080/o/token/
      {"access_token": "KstIqSnt9Mj4ITmCGRJpTYW3W59nRv", "token_type": "Bearer", "expires_in": 36000, "refresh_token": "uJzJal9YSpirSax6vW2Di43ojRGvRV", "scope": "read write groups"}

      1. 再次更改回Confidential并在curl请求中发送我的用户名和密码。
      2. curl -X POST -d "client_id=17U5rPQM1HDtF3hR8sIRP6pmzn033EbnwJJ6lNCx&client_secret=D6bSgR8qyIwDl5SyF4kJ0wBJq56NXMUY9LVjD6NZTxnAh4ylTD2YBJxDBaLahpabZMGowWpVTYn6UW8Yq1GB6nAwm7euXZZxXaCxQLKK2KDNrfz4JSavFCKekc1LOCQz&grant_type=authorization_code&code=UJnq1xfKULOUD0m2Oxb26NYmnuxKMn&redirect_uri=http%3A%2F%2Flocalhost%2Foauth_client%2F" -u'admin:pass' http://localhost:8080/o/token/
        {"access_token": "VhMgx59x4PHUPOgSTKMGewsM8JfT58", "token_type": "Bearer", "expires_in": 36000, "refresh_token": "T0BhP1lFvyiS9c5rH6xHqt4uBItAS1", "scope": "read write groups"}

答案 3 :(得分:0)

检查以确认您正确设置了详细信息。例如,在我的情况下,我的INotifyPropertyChanged是错误的。