我试图在我正在工作的项目中使用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."}
这就好像客户机服务没有在正确的位置查找凭据,这使我认为某些设置不太正确。在
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
对于“隐性拨款流”,您必须:
我们不需要身份验证,因为我们在这个框架中不需要身份验证,因为我们没有默认的身份验证类。在
您可以在DOT中看到的基于lib的所有授予类型 https://oauthlib.readthedocs.org/en/latest/oauth2/grants/grants.html
或者你可以使用更简单的“资源所有者密码为基础的”,就像在DOT文档中描述的那样。。。在
相关问题 更多 >
编程相关推荐