亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

Django中的JWT身份驗證的實現

瀏覽:95日期:2024-09-08 09:43:25
1.認證與授權

1.驗證:身份驗證是驗證個人或設備標識的過程。身份驗證過程之一是登錄過程。注冊網站后,您的信息(ID,密碼,名稱,電子郵件等)將存儲在其數據庫中。之后,您無需創建帳戶即可提供信息。相反,您只需要提供用戶名和密碼來驗證您的身份,網站就會自動知道您正在訪問。

2.授權:授權是用于確定用戶特權或訪問級別的安全機制。在許多社區網站上,只有上傳帖子和管理員的人才能刪除它。當其他人嘗試刪除帖子時,網站應該拋出錯誤(但是在許多情況下,他們甚至看不到刪除按鈕)。因此,對于每個請求,用戶都需要證明自己具有權限。

2.什么是JWT

JSON Web令牌(JWT)是一種開放標準(RFC 7519),它定義了一種緊湊且自包含的方式,用于在各方之間安全地將信息作為JSON對象進行傳輸。您可以使用JWT對請求進行身份驗證和授權。

JWT由三個串聯的Base64url編碼的字符串(標頭,有效負載和簽名)組成,并用點號(,)分隔。標頭包含有關令牌和加密算法類型的元數據。簽名用于驗證令牌的可信度。有效負載包含用于身份驗證和授權的所有必要數據。

3.存儲JWT

當用戶登錄時,服務器將創建JWT并將其發送到客戶端。然后,客戶端將其存儲到會話存儲或本地存儲。每次客戶端向服務器端發送需要身份驗證或授權的請求時,都會在授權標頭上發送JWT。易受XSS(跨站點腳本)攻擊:會話和本地存儲可通過JavaScript訪問。惡意第三方可以將其JS注入網站,從而可以向API發出請求。

服務器將JWT存儲在Cookie中,并使用存儲在Cookie中的JWT驗證用戶。Cookies容易受到CSRF的攻擊,因為它們隨每個請求一起發送。因此,惡意的第三方可以輕松地提出意想不到的請求。

4.Django中的JWT

# settings.pySECRET_KEY = ’abcde1234’,JWT_ALGORITHM = ’HS256’

# user/views.pyimport jsonfrom datetime import datetime, timdeltafrom django.conf import settingsfrom django.http import JsonResponsefrom django.views import Viewimport bcryptimport jwtfrom .models import Userfrom token_utils import user_tokenclass UserSignInView(View): def post(self, request):try: data = json.loads(request.body) username = data[’username’] pw_input = data[’password’] user = User.objects.filter(username=username).first() if user is None:return JsonResponse({'message': 'INVALID_USERNAME'}, status=401) if bcrypt.checkpw(pw_input.encode(’utf-8’), user.password.encode(’utf-8’)):key = settings.SECRET_KEYalgorithm = settings.JWT_ALGORITHMtoken = jwt.encode( {’iss’: ’me’,’id’: user.id,’exp’: datetime.utcnow() + timedelta(days=14) }, key, algorithm=algorithm).decode(’utf-8’)response = JsonResponse( {’message’: ’SUCCESS’ }, status=200)# 當使用本地/會話存儲而不是Cookie時,只需在JsonResponse中發送令牌if data.get(’remember_me’) is not None: max_age = 14*24*60*60 # 14 days expires = datetime.strftime(datetime.utcnow() + timedelta(seconds=max_age),'%Y-%m-%d %H:%M:%S' ) response.set_cookie(’token’,token,max_age=max_age,expires=expires,httponly=True ) return response return JsonResponse({'message': 'WRONG_PASSWORD'}, status=401)except KeyError as e: return JsonResponse({’message’: f’KEY_ERROR: {e}’}, status=400)except ValueError as e: return JsonResponse({’message’: f’VALUE_ERROR: {e}’}, status=400)

# token_utils.pyimport jsonfrom django.conf import settingsfrom django.http import JsonResponseimport jwtfrom user.models import Userdef user_token(func): def wrapper(self, request, *args, **kwargs):try: token = request.COOKIES.get(’token’) # token = request.headers.get(’token’) key = settings.SECRET_KEY algorithm = settings.JWT_ALGORITHM if token is None:return JsonResponse({'message': 'INVALID_TOKEN'}, status=401) decode = jwt.decode(token, key, algorithm=algorithm) request.user = User.objects.get(id=decode[’id’])except jwt.ExpiredSignatureError: return JsonResponse({'message': 'EXPIRED_TOKEN'}, status=400)return func(self, request, *args, **kwargs) return wrapper

到此這篇關于Django中的JWT身份驗證的實現的文章就介紹到這了,更多相關Django JWT身份驗證內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Django
相關文章:
主站蜘蛛池模板: 伦理片在线观看网址男女色黄色录像一一 | 日日摸日日碰日日狠狠 | 黄色小毛片 | 中国一级片免费 | 爱操tv| 天天天天鲁天天拍一拍 | 国产精品jizz在线观看免费 | 成人免费专区 | 久草在线国产视频 | 国产成人亚洲综合a∨婷婷 国产成人亚洲综合无 | 51精品 | 国产免费a v吧在线观看不卡 | 欧美三级欧美一级 | 久久青青草原精品国产不卡 | 888午夜不卡理论久久 | 免费观看性欧美一级 | 骚骚精品免费看 | 关婷哪一级毛片高清免费看 | 黄色国产片 | 国产精品亚洲欧美大片在线看 | 亚洲日韩色综合视频 | 午夜视频网址 | 国产麻豆精品在线 | 亚洲国产日韩在线观频 | 久久精品国产69国产精品亚洲 | 久久久久久全国免费观看 | 国外精品视频在线观看免费 | 国产精品冒白浆免费视频 | 午夜视频吧 | 国产精品线在线精品 | 亚洲综合色婷婷六月丁香 | 欧美一级在线毛片免费观看 | 免费看黄色的网站 | 国产免费高清福利拍拍拍 | 久久人体做爰大胆 | 国产主播在线播放 | 成 人 黄 色 大 片 | 在线视频一二三区2021不卡 | 久久精品亚洲一区二区三区浴池 | 亚洲综合国产一区在线 | 女人被男人狂躁的视频免费 |