使用rest-framework-jwt进行身份认证

环境依赖
django
rest-framework
rest-framework-jwt

推荐文章
Django REST framework的各种技巧
JSON Web Tokens in django系列1-4
django-restframework-jwt文档

准备

注意django-restframework-jwt需要配合restframework使用.

settings.py:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ),
}

通过用户名和密码获得token

jwt已经封装了获取token的代码,我们只需要发送用户名和密码给对应的API接口,就可以获取token:

urls.py

from rest_framework_jwt.views import obtain_jwt_token, verify_jwt_token

urlpatterns = [
    url(r'^$', include(router.urls)),
    url(r'^api-auth/', obtain_jwt_token),  # POST email=email&password=password
]

可以使用python manage.py createsuperuser创建一个用户,然后发送用户名和密码测试一下:

curl -X POST -d "email=admin&password=password123" http://localhost:8000/api-auth/

这会返回一个包含token的json字符串。

使用token访问被保护的url

设置某些view的权限(permission_classes)为permissions.IsAuthenticated,那么没有提供token而访问被保护的view是不被允许的.
你可以设置用户注册的权限为permissions.AllowAny,这样用户可以通过用户名和密码拿到token,在之后访问被保护的view时,将token作为身份凭证发送给服务端(rest-framework会自动验证token是否有效,如果在settings.py中做了准备中的配置的话)

curl -H "Authorization: JWT your_token" http://localhost:8000/some_api/

将上一步返回的token放在请求头中(JWT这个前缀可以在settings.py中被更改,详情见官方文档)

你可能感兴趣的:(使用rest-framework-jwt进行身份认证)