【发布时间】:2017-08-02 21:31:32
【问题描述】:
我正在使用 Django rest 框架创建一个 API,并且我正在添加 oauth2 身份验证。 我能够正确设置它,并且可以获取令牌来访问我的 API 端点。到目前为止一切都很好。
我现在的问题是如何在受保护的内容和公开的内容方面更具选择性。在我的 API 中有一个端点子集,每个人都可以访问,因此他们是匿名用户,并且由于用户名和密码不存在,他们无法以相同的方式获取访问令牌。
这里是我的settings.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_AUTHENTICATION_CLASSES': (
'oauth2_provider.ext.rest_framework.OAuth2Authentication',
),
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAdminUser',
),
'PAGE_SIZE': 10
}
INSTALLED_APPS = (
...
'oauth2_provider',
'rest_framework',
...
)
views.py:
# Everything fine for this end point
class PrivateViewSet(viewsets.ModelViewSet):
serializer_class = custom_serializers.MySerializer
http_method_names = ['get', 'post', 'head', 'options']
permission_classes = (permissions.IsAuthenticated, custom_permissions.IsAdminOrOwner, TokenHasReadWriteScope)
# Getting the error
class PublicViewSet(viewsets.ModelViewSet):
serializer_class = custom_serializers.MyPublicSerializer
permission_classes = (permissions.AllowAny,)
所以当我尝试访问“PublicViewSet”端点时,我收到以下错误:
{"detail": "Authentication credentials were not provided."}
有没有办法决定应用 oauth2 授权并保持其他端点公开开放?
【问题讨论】:
标签: api oauth-2.0 django-rest-framework