这是我第一次使用django rest和Django Oauth工具包我正在遵循本教程 oauth2-with-django-rest-framework 但是当我运行python manage.py migrate时,我收到以下错误:
ImportError:无法为API设置'DEFAULT_AUTHENTICATION_CLASSES'导入'oauth2_provider.ext.rest_framework.OAuth2Authentication'.ImportError:没有名为ext.rest_framework的模块.
出了什么问题?我应该安装另一个模块吗?我的虚拟环境包含:
CERTIFI == 2017年4月17日
chardet的== 3.0.4
Django的== 1.11.2
Django的扩展== 1.8.1
Django的OAuth的工具== 1.0.0
djangorestframework == 3.6.3
IDNA == 2.5
oauthlib == 2.0.2
pytz == 2017.2
请求== 2.18.1
6 == 1.10.0
Unidecode == 0.4.21
urllib3 == 1.21.1
django importerror oauth-2.0 django-rest-framework django-oauth
我正在使用最新的Django OAuth2 Toolkit(0.10.0)和Python 2.7,Django 1.8和Django REST框架3.3
使用时grant_type=password,我注意到一些奇怪的行为,任何时候用户要求新的访问令牌:
curl -X POST -d "grant_type=password&username=<user_name>&password=<password>" -u"<client_id>:<client_secret>" http://localhost:8000/o/token/
Run Code Online (Sandbox Code Playgroud)
一个新的访问令牌和刷新令牌创建.在令牌超时之前,旧的访问和刷新令牌仍然可用!
我的问题:
我发现的一个解决方案是REST Framework OAuth一次为一个访问令牌提供配置.我并不急于使用该提供商,但我可能不会有选择.
我已经浏览了Django OAuth Toolkit的提供者和资源的文档,但我能找到的只是how to 'authenticate' a user,而不是register用户的方式.
我可以在我的机器上设置所有内容,但不知道如何使用用户名和密码注册用户.我知道我错过了一些非常微妙的东西.如何准确注册用户并获取访问令牌以回复与我的资源服务器通信.
要么
是不是我首先使用普通的Django机制注册用户,然后获得相同的令牌?
python django django-registration django-rest-framework django-oauth
我有几个后端 API,它们是 Django 项目。他们有一个 UI(单页应用程序)和一个基于用户名密码的登录。
我的客户通常是开发人员,他们不想要 UI,他们想要的只是访问后端 API,他们可以构建自己的仪表板等。他们希望将 API 与后端系统集成。
问题
问题 1. 我打算使用 django-oauth-tool kit ,在我看来,客户端凭据授予类型适合此用例。我对吗 ?
为了进行实验,我在本地运行在 8000 端口上启动了一个单独的 oauth 服务器,我在 8001 上启动了资源服务器 (r1),在 8002 上启动了资源服务器 (r2)。
第1步 :
我去了oauth服务器的管理面板,为资源r1创建了一个用户u1,为资源r2创建了一个用户u2。我去了管理面板中的应用程序模块,在具有授权类型资源所有者密码的应用程序中注册了 r1 和 r2。为了生成访问令牌,我调用了令牌端点
POST -d "grant_type=password&username=u1&password=u1password" -u "clientid of R1:clientsecre of fR1" http://localhost:8000/o/token/
Run Code Online (Sandbox Code Playgroud)
我得到了访问令牌
{"access_token": "KdAOMZBiMomVxpvjAWErwVGog6NRRH", "expires_in": 86400, "token_type": "Bearer", "scope": "read write introspection", "refresh_token": "ffgkZZ5NtVFh4REs0TbFAALNkJqXVQ"}
Run Code Online (Sandbox Code Playgroud)
第2步:
说上面我为资源服务器 R1 生成的访问令牌,所以我去了 R1 的设置文件并添加了这个令牌以进行自省
OAUTH2_PROVIDER = {
'RESOURCE_SERVER_INTROSPECTION_URL': 'http://localhost:8000/o/introspect/',
'RESOURCE_SERVER_AUTH_TOKEN': '9b2uVud7WXHEdyolznvvkM3KwWfkVe', # OR this but not both:
#'RESOURCE_SERVER_INTROSPECTION_CREDENTIALS': ('5sRVXLoTQj9vlkLWaziIMZrgra1keupWIQ2On2hX','5jwMxls1JiAiQiNVnRTtbjmzgRO20FEHD0BBdiSAwvSL1XswZKqglDRke2L8Ig77ol7OE3ZdsA9SE7sry0u3BXwd1OvfFfhDVJFSLWlPG6g1vB3w4ZFc1g8ZwgzXJooc'),
Run Code Online (Sandbox Code Playgroud)
} …
security django oauth-2.0 django-rest-framework django-oauth
我是一名 Nodejs 开发人员,但目前正在迁移到 django(作为一名 Python 爱好者)。我正在尝试实施OAuth2,Django Rest Framework但我不知道如何开始。
在nodejs中,有一个维护良好的passportjs库,并且它为每种可能的身份验证类型提供了策略。Django 休息框架怎么样?用户名/密码身份验证看起来很简单,但 oauth2 并没有很好地涵盖。
在这里的DRF文档中,提到了两个用于 oauth 的库。第一个是django-oauth-toolkit ,它维护得很好,但是在阅读文档之后,我似乎不太了解,它甚至没有谈论 googl/facebook oauth。无论如何,我不确定它是用来做什么的。第二个是django-rest-framework-social-oauth2,看起来很简单,但已经一年多没有碰过了,可能不再维护了。
那么,你们如何在 DRF 项目中执行 oauth2 ?
我们希望在后端实现Django OAuth,以集成Alexa和其他第三方API。我们一直在他们网站上的教程(http://django-oauth-toolkit.readthedocs.io/en/latest/tutorial/tutorial.html)上进行学习,但到目前为止却遇到了一个安全问题,使我们无法逃脱:
是否存在任何用户都可以访问的安全问题https://<oursite.com>/o/applications?如果是这样,需要采取什么步骤来防止用户访问这些视图?
关于SO的唯一相关问题并不是特别有用:
我正在使用Django Oauth库。
我想使用其他身份验证和资源服务器。
在Auth Server上,以下是我的设置。
INSTALLED_APPS = [
...
'oauth2_provider',
'rest_framework',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
# ############## OAUTH SETTINGS ###################
OAUTH2_PROVIDER = {
'SCOPES': {'users': 'user details', 'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups', 'introspection': 'introspection'},
'ACCESS_TOKEN_EXPIRE_SECONDS': 86400, # 1 Day.
}
Run Code Online (Sandbox Code Playgroud)
在我的资源服务器上
INSTALLED_APPS = [
...
'oauth2_provider',
'rest_framework',
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
}
# ############## …Run Code Online (Sandbox Code Playgroud) 我已经将OAuth2.0与django-rest-framework集成在一起.当我将经过身份验证的请求发送到基于类的视图时,我得到了这个
{
"detail": "You do not have permission to perform this action."
}
Run Code Online (Sandbox Code Playgroud)
settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
)
}
Run Code Online (Sandbox Code Playgroud)
views.py
from rest_framework import permissions
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope
class LogoutView(APIView):
"""
This will help in logout of user.
"""
authentication_classes = ()
permission_classes = (permissions.IsAuthenticated, TokenHasReadWriteScope)
def get(self, request):
return Response({'s': 'd'})
Run Code Online (Sandbox Code Playgroud)
urls.py
from django.urls import path, re_path
from accounts.views import SignUpView, LoginView, LogoutView
urlpatterns = [
path('signup/', SignUpView.as_view()),
path('login/', LoginView.as_view()),
path('logout/', LogoutView.as_view()), …Run Code Online (Sandbox Code Playgroud) 我正在使用Django REST Framework和在我的应用程序中Django-OAuth-toolkit启用OAuth2身份验证。
由于使用OAuth2 后,我不再需要基于令牌的身份验证,因此不需要令牌表/模型。
有时在看到两个不同的处理令牌的模块后,我感到很困惑。
因此,我想Token从 Django 的管理面板中删除/隐藏表。
这是我的settings.py文件
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'oauth2_provider.contrib.rest_framework.OAuth2Authentication'
),
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated'
],
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
Run Code Online (Sandbox Code Playgroud)
我已经删除了基于令牌的身份验证,但Token管理面板中仍然有表格
我正在尝试为我的Django REST API设置OAuth2身份验证系统(使用DjangoRestFramework和Django-Oauth-Toolkit).我根据官方文档写了一切,但是系统给出错误"无法导入ext.rest_framework"
这是我的setting.py文件:
OAUTH2_PROVIDER = {
# this is the list of available scopes
'SCOPES': {'read': 'Read scope', 'write': 'Write scope', 'groups': 'Access to your groups'}
}
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': [
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
],
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAuthenticated',),
'PAGE_SIZE': 10
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
django ×10
django-oauth ×10
oauth-2.0 ×5
python ×5
oauth ×2
alexa ×1
importerror ×1
security ×1