Django OAuth 工具包令牌生成
Posted
技术标签:
【中文标题】Django OAuth 工具包令牌生成【英文标题】:Django OAuth Toolkit Toen Generation 【发布时间】:2019-04-16 17:13:04 【问题描述】:使用 Django OAuth Toolkit,我将 authentication_grant_type 设置为密码,并将 skip_authorization 设置为 true。我可以使用以下命令生成令牌并使用 curl 刷新令牌,而不会出现问题:
curl -X POST -d "grant_type=password&username=username&password=password" http://p6ge67ihXcwECuy7Z7iomyv16VlEk4uX6B886UWl:NZK5WUWsdb1oI1aAXAy3EOLx6zbXBrtVEIUoI7pK9ZLpwkMTvIcq3FMycHklGjJazHj4TguPPvpEL1JNmL6uZz594DjNk99nKu6Uq4Z66mM26AWD63D9WO449exUjYq3@localhost:8000/o/token/
但是当我尝试用 POST 替换此命令并从 Django 视图调用该 POST 时,我得到以下信息:
<Response [401]>
Unauthorized: /o/token/
任何线索为什么会发生这种情况?我的POST代码如下:
data =
'grant_type': 'password',
'username': 'username',
'password': 'password'
response =
requests.post('http://p6ge67ihXcwECuy7Z7iomyv16VlEk4uX6B886UWl:NZK5WUWsdb1oI1aAXAy3EOLx6zbXBrtVEIUoI7pK9ZLpwkMTvIcq3FMycHklGjJazHj4TguPPvpEL1JNmL6uZz594DjNk99nKu6Uq4Z66mM26AWD63D9WO449exUjYq3@localhost:8000/o/token/', data=data)
我错过了什么?任何帮助将不胜感激。谢谢。
【问题讨论】:
response.contents
的值是多少?
好的,现在我在 POST 调用和 response.contents = b'"error": "unsupported_grant_type 中添加了一个标头 (headers = 'Content-Type': 'application/json') “”。显然客户端 ID 和客户端密码现在被接受,但授权类型不是。即使我将授权类型更改为授权代码,错误仍然存在。有什么想法吗?
【参考方案1】:
如果该Application
接受了授权类型,请检查 Django 管理员(在我的情况下是 /admin/oauth2_provider/application):
试试Resource owner password-based
或Client credentials
【讨论】:
设置为“基于资源所有者密码”。当我从命令行使用 cURL 进行调用时,它会生成并检索令牌,但当我尝试使用 POST 调用调用相同的服务时不会。还有什么想法吗? 还有其他建议吗?谢谢。以上是关于Django OAuth 工具包令牌生成的主要内容,如果未能解决你的问题,请参考以下文章
Django OAuth 2 客户端设置 - 客户端无法识别令牌
使用 django rest 框架和 django oauth 工具包在单元测试中进行 oAuth 身份验证
django oauth 工具包 unsupported_grant_type 错误
使用 Django OAuth2 Toolkit 生成单一访问令牌