Django OAuth Toolkit invalid_grant 错误

7
我有一个小问题,我有一个使用Django OAuth Toolkit的Django应用程序,当使用Authorization Code流时,无法从服务器获取访问令牌。隐式流程可以正常工作。我在堆栈上没有找到任何关于我的问题的信息,如果这是另一个问题的重复,我真的很抱歉。您可以使用此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个回答

19

如果代码过期了,就会出现这种情况。默认情况下,这些代码很快就会过期。您可以在Django管理页面的Grants下查找您的代码,并将到期日期更改为遥远的未来。


2

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

  1. 失败的错误消息是{"error": "invalid_grant"}

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

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请求中发送我的用户名和密码。

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"}

这段代码是用于获取访问令牌的。您需要在请求正文中提供客户端ID,密钥以及授权码等参数。如果所有参数都有效,则将返回具有访问令牌、令牌类型、到期时间、刷新令牌和范围的JSON响应。

1

我发现我无法单独执行请求。当我建立自己的客户端并测试时,所有内容都很好。


嗨!我遇到了完全相同的问题。你能帮我解决一下并详细解释一下你是如何解决的吗?我尝试了很多方法,但还是卡在那个问题上 :( - Joabe da Luz

0

请检查您的详细信息是否设置正确。例如,在我的情况下,我的client_id是错误的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接