Django OAuth 2客户端安装客户端无法识别令牌

2024-04-19 23:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我正在工作的项目中使用djangoauth工具包。我设置了两个服务器—一个作为OAuth提供程序,另一个作为客户端服务,只有经过身份验证的用户才能访问。在

OAuth提供程序似乎运行得很好。我能够在客户机服务上创建一个指向OAuth提供者的链接。然后用户登录,并提示是否允许/拒绝应用程序。如果用户允许应用程序,那么用户将被重定向回客户机服务,并且URI包含访问令牌。因为这项服务需要同时从网站和移动客户端访问,所以我使用了一个隐式授权,并按照以下方式操作:https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#browser-based-apps。在

提供程序的一切似乎都如预期的那样工作,但我对客户端服务应用程序有问题,它也是一个Django应用程序。它似乎无法识别重定向URI中的令牌,因此我无法针对该服务发出任何经过身份验证的请求。在

我对客户端服务的设置.py公司名称:

我添加了AUTHENTICATION_BACKENDS部分,如下所示:

AUTHENTICATION_BACKENDS = (
  'django.contrib.auth.backends.ModelBackend',
  'oauth2_provider.backends.OAuth2Backend', 
)

我添加了oauth2_provider.middleware.OAuth2TokenMiddleware到“中间件类”部分。在

我已将oauth2提供程序添加到已安装的应用程序中。在

REST_FRAMEWORK部分现在看起来像:

^{pr2}$

我还添加了OAUTH_PROVIDER部分:

OAUTH2_PROVIDER = {
  # this is the list of available scopes 
  'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'}
}

就我所能想到的,在我的设置.py这会告诉Django寻找代币,但我有点不知所措。在

有人能给我指出我可能遗漏的地方吗?在

编辑:我应该澄清我在尝试调用客户机服务时得到的结果。当我向客户机服务发出curl请求时,如下所示(除了插入实际值外):

    curl -H "Authorization: Bearer token_goes_here" https://service.com/api/some_api/call

我得到的结果是:

{"detail": "Authentication credentials were not provided."}

这就好像客户机服务没有在正确的位置查找凭据,这使我认为某些设置不太正确。在


Tags: django用户pyhttps程序com身份验证应用程序
1条回答
网友
1楼 · 发布于 2024-04-19 23:20:08

REST\u FRAMEWORK is blocked non-authenticated的默认\u PERMISSION_类。在

如果计划使用javascript访问restapi,请参见https://github.com/evonove/django-oauth-toolkit/blob/master/oauth2_provider/tests/test_implicit.py

对于“隐性拨款流”,您必须:

  1. 使用用户登录名和密码通过ModelBackend登录。在
  2. 创建oauth2应用程序(/o/applications/) 或者从django控制台,请参阅test。在
  3. 从登录用户的“/o/authorize/”url获取身份验证令牌。在
  4. 然后,您必须将token添加到“HTTP_AUTHORIZATION”:“Bearer”+access_token“头中,以访问API资源。在

我们不需要身份验证,因为我们在这个框架中不需要身份验证,因为我们没有默认的身份验证类。在

您可以在DOT中看到的基于lib的所有授予类型 https://oauthlib.readthedocs.org/en/latest/oauth2/grants/grants.html

或者你可以使用更简单的“资源所有者密码为基础的”,就像在DOT文档中描述的那样。。。在

相关问题 更多 >