DjangoRestFramework 使用 django-oauth-toolkit 使网站成为 OAuth Provider(提供方)

本文详细介绍了如何在Django项目中使用django-oauth-toolkit实现OAuth2.0授权,包括安装、配置、编写API接口、注册应用、访问接口、权限设置、信号处理以及服务分离等步骤。

本文为 django-oauth-toolkit 使用记录。(官方文档)

参考阅读:OAuth 2.0 的四种方式

1. 安装

pip install django-oauth-toolkit djangorestframework

2. 使用

创建 Django 项目,目录树如下图: 

│  manage.py
├─provider
│      asgi.py
│      settings.py
│      urls.py
│      wsgi.py
│      __init__.py
└─users
    │  admin.py
    │  apps.py
    │  models.py
    │  tests.py
    │  views.py
    └─__init__.py

并进行相关配置:

# provider/settings.py

INSTALLED_APPS = [
    ...
    'oauth2_provider',    # add
    'users',              # add                
    'rest_framework',     # add
]

LOGIN_URL = '/admin/login/'

OAUTH2_PROVIDER = {
    'SCOPES': {
        'read': 'Read scope',
        'write': 'Write scope',
        'test': 'test api',
        'introspection': 'Introspect token scope',  # 认证 和 资源服务器分离时使用
    }
}

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',  # 使用OAuth登录认证
    )
}

# provider/urls.py

urlpatterns = [
    ...
    path('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),  # add
]

3. 编写 API 接口

本次项目中的 User 模型使用 Django 默认的模型。 

# users/views.py
from django.contrib.auth.models import User
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope
from rest_framework import generics, permissions, serializers


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'email', "first_name", "last_name")


class UserList(generics.ListCreateAPIView):
    permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer
    required_scopes = ['test']


class UserDetails(generics.RetrieveAPIView):
    permission_classes = [permissions.IsAuthenticated, TokenHasReadWriteScope]
    queryset = User.objects.all()
    serializer_class = UserSerializer
    required_scopes = ['test']


# provider/urls.py
from users.views import UserList    # add

urlpatterns = [
    ...
   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值