Django OAuth 工具包设置问题

Posted

技术标签:

【中文标题】Django OAuth 工具包设置问题【英文标题】:Django OAuth Toolkit setup issue 【发布时间】:2014-04-02 19:42:43 【问题描述】:

我正在关注 https://django-oauth-toolkit.readthedocs.org/en/0.7.0/rest-framework/getting_started.html 来设置带有 rest 框架的 Django OAuth Toolkit。

与第 4 步一样:https://django-oauth-toolkit.readthedocs.org/en/0.7.0/rest-framework/getting_started.html#step-4-get-your-token-and-use-your-api

它说要获得令牌,我们需要像这样卷曲:

curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" http://<client_id>:<client_secret>@localhost:8000/o/token/

我对这个过程的实际 curl 请求看起来像这样(对于已经生成的 client_id 和 client_secret)

curl -X POST -d "grant_type=password&username=test&password=test" http://mbqvonqO7sI1lrh87uDd.C1U..NbKTb@0=eCM8Fl::2O=!0ZjE5UCha0UW?Oie-XCVUn;3XtmjT2SbFpzDJeM@Bn3.vPS!KLoDqVz7L-3.FfjP9v6yYyu2ghxObnIdIWppu=J@RPxPOfU@Q7KPt7da.?Bg0o5kCt5tY:wamsF@127.0.0.1:8000/o/token/

没有返回任何响应并给出错误“bash: !0: event not found”

打电话有什么问题吗?

【问题讨论】:

尝试用双引号或单引号将您的 url 括起来,因为它包含许多不符合不带引号的 shell args 的字母。 我注意到您的 client_id 和 client_secret 中还有一个 at 符号和列。我认为 curl 解析器无法区分 client 和 client_secret 那里。 【参考方案1】:

我遇到了与 OP 相同的问题,这是唯一对我有用的解决方案:

curl -X POST -d 'grant_type=password&username=<username>&password=<password>' --user '<client_id>:<client_secret>' 'http://localhost:8000/o/token/'

我在Django OAuth Toolkit's Github issue #167 找到了这个解决方案。那里有一个很好的解释。

【讨论】:

【参考方案2】:

问题在于注册申请过程中生成的“client id”和“client secret”(http://django-oauth-toolkit.readthedocs.org/en/0.7.0/rest-framework/getting_started.html#step-3-register-an-application)

“client id”和“client secret”包含特殊字符,不能以文档中提到的方式与 curl 请求一起使用。

我们可以按照 Almalki 建议的方式使用它:

curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/o/token/

【讨论】:

【参考方案3】:

您可以将 client_id 和 client_secret 设置为 POST 参数:

curl -X POST -d "client_id=YOUR_CLIENT_ID&client_secret=YOUR_CLIENT_SECRET&grant_type=password&username=YOUR_USERNAME&password=YOUR_PASSWORD" http://localhost:8000/o/token/

【讨论】:

以上是关于Django OAuth 工具包设置问题的主要内容,如果未能解决你的问题,请参考以下文章

Django OAuth 2 客户端设置 - 客户端无法识别令牌

django-oauth-工具包; Django Rest Framework - 未提供身份验证凭据

使用 django rest 框架和 django oauth 工具包在单元测试中进行 oAuth 身份验证

保护 Django OAuth 工具包视图

如何使用 Django oAuth 工具包从 Django Rest Framework 获取请求的应用程序详细信息

django oauth 工具包 unsupported_grant_type 错误