当前位置:   article > 正文

django restful权限认证方式_default_authentication_classes

default_authentication_classes
  1. 1.session认证:
  2. # # 全局所有页面都有权限认证
  3. # REST_FRAMEWORK = {
  4. # 'DEFAULT_AUTHENTICATION_CLASSES': (
  5. # 'rest_framework.authentication.BasicAuthentication',
  6. # 'rest_framework.authentication.SessionAuthentication',
  7. # ),
  8. # 'DEFAULT_PERMISSION_CLASSES': [
  9. # 'rest_framework.permissions.IsAuthenticated',
  10. # ]
  11. # }
  12. # 局部类添加定制身份权限认证
  13. # 设置需要身份验证的类
  14. authentication_classes = [BasicAuthentication, SessionAuthentication]
  15. # # 全类权限认证
  16. # permission_classes = [IsAuthenticated]
  17. def get_permissions(self):
  18. # 定制类内方法权限认证
  19. if self.action == 'create':
  20. return []
  21. else:
  22. return [IsAuthenticated,]
  23. def get_serializer_class(self):
  24. # 根据不同的动作调用不同的序列化类
  25. if self.action == 'retrieve':
  26. # 登录
  27. return UserSerializer
  28. elif self.action == 'create':
  29. # 注册
  30. return RegisterSerializer
  31. return UserSerializer
  1. 2.Token认证
  2. 优点:1、无状态
  3. token 自身包含了身份验证所需要的所有信息,使得我们的服务器不需要存储 Session 信息,这显然增加了系统的可用性和伸缩性,大大减轻了服务端的压力。
  4. 2、防止CSRF 攻击
  5. CSRF(Cross Site Request Forgery) 一般被翻译为 跨站请求伪造,属于网络攻击领域范围。构成这个攻击的原因,就在于 Cookie + Session 的鉴权方式中,鉴权数据(cookie 中的 session_id)是由浏览器自动携带发送到服务端的,借助这个特性,攻击者就可以通过让用户误点攻击链接,达到攻击效果。而 token 是通过客户端本身逻辑作为动态参数加到请求中的,token 也不会轻易泄露出去,因此 token 在 CSRF 防御方面存在天然优势。
  6. 3、适合移动应用
  7. 移动端上不支持 cookie,而 token 只要客户端能够进行存储就能够使用,因此 token 在移动端上也具有优势。
  8. 4、单点登录友好
  9. 使用 Session 进行身份认证的话,实现单点登录,需要我们把用户的 Session 信息保存在一台电脑上,并且还会遇到常见的 Cookie 跨域的问题。但是,使用 token 进行认证的话, token 被保存在客户端,不会存在这些问题。
  10. 步骤:
  11. 1.在settings添加应用 'rest_framework.authtoken',并迁移
  12. 2.url:from rest_framework.authtoken import views
  13. re_path(r'api-token-auth/', views.obtain_auth_token)
  14. 用username和password登录后会产生token
  15. {
  16. "token": "c5aa5eea68e1278665fb6239748b9c040c666182"
  17. }
  18. 3.views里添加Token认证
  19. # 局部添加定制身份权限认证
  20. # 设置需要身份验证的类
  21. authentication_classes = [BasicAuthentication, TokenAuthentication]
  22. # 全类权限认证
  23. permission_classes = [IsAuthenticated]
  24. 用户未登录就会拦截,必需将token添加到请求头中
  25. key : value
  26. Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

 

  1. 3.JWT认证
  2. token缺陷:
  3. 1.token 会被永久保存,不安全
  4. 2.对于分布式系统,需要同步token。
  5. JWT优点:
  6. 1.可扩展性好 应用程序分布式部署的情况下,session需要做多机数据共享,通常可以存在数据库或者redis里面。而jwt不需要。
  7. 2.无状态 jwt不在服务端存储任何状态。RESTful API的原则之一是无状态,发出请求时,总会返回带有参数的响应,不会产生附加影响。
  8. 用户的认证状态引入这种附加影响,这破坏了这一原则。另外jwt的载荷中可以存储一些常用信息,用于交换信息,有效地使用 JWT,可以降低服务器查询数据库的次数。
  9. 3.基于JSON,方便解析,可以在令牌中自定义丰富内容,易扩展。通过非对称加密及数字签名技术,可以防止篡改、安全性高。可以不依赖认证服务就可以完成授权。
  10. 缺点: JWT令牌较长,占存储空间比较大。
  11. 步骤:
  12. 1.安装:pip install djangorestframework-simplejwt
  13. 2.配置
  14. 全局配置:在settings里添加
  15. REST_FRAMEWORK = {
  16. 'DEFAULT_AUTHENTICATION_CLASSES': [
  17. 'rest_framework_simplejwt.authentication.JWTAuthentication',
  18. ],
  19. }
  20. 局部配置:
  21. # 局部添加定制身份权限认证
  22. # 设置需要身份验证的类
  23. authentication_classes = [BasicAuthentication, JWTAuthentication]
  24. # 全类权限认证
  25. permission_classes = [IsAuthenticated, ]
  26. 3.url:
  27. path('api/auth/token/obtain/', TokenObtainPairView.as_view()),
  28. 登录获得
  29. {
  30. "refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTY1MDYxMjUyOCwiaWF0IjoxNjUwNTI2MTI4LCJqdGkiOiI2N2ZlNTFkNjY2Njc0N2IxOGFlYTdjYzZiZmZkNmZhZSIsInVzZXJfaWQiOjN9.DfxUbpzelHVEK6RLk7FGke-tp6SAcv4Qj8UTkeR6_Aw",
  31. "access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjUwNTI2NDI4LCJpYXQiOjE2NTA1MjYxMjgsImp0aSI6IjgzZTdhNWFlMTY3ZDRhMjhiZTljNGE4MmNkMGQ4MGExIiwidXNlcl9pZCI6M30.lq-O7tbBPkYKvme9Wpd6tS8YgduRKPnGsR4eA8eODjw"
  32. }
  33. 请求地址path('api/login/', MovieListViewSet.as_view({'get': 'list'}))
  34. 在请求头添加
  35. key : value
  36. Authorization: Bearer access
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/71640
推荐阅读
相关标签
  

闽ICP备14008679号