[HTTP]http-認証/認証について(2)
5894 ワード
掘れば掘るほど面白いhttp認証/承認🔐
djangoは認証/認証(bcrypt,JWT)をどのように実施するか.
refresh tokenとOAuthの概要
0
資格認定/資格認定の概要
(httpの無状態属性を無視してログイン状態を維持できる)
How to use bcrypt
サーバであっても,ユーザのパスワードを~として保存することはできない.
△いつ黒くなるか知っていますか.
(法律上-個人情報保護法第7条も規定されています)
したがって,djangoでAPIを実装する場合,ユーザのパスワードを受信するとbcryptというライブラリで暗号化する必要がある.
bcryptはsalting,key-stretchingを含む.
import bcrypt
bcrypt.hashpw(data['password'].encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
>>> DB에 저장할 때는, decode까지 해서 str 형태로 저장한다 (파이썬 버전에 따라 다름)
そして、パスワードを確認するときは、以下のように記入してください.どちらもbyte形式でなければならないため、データベース内の暗号化パスワードも符号化されstr>byteに変換されます.
bcrypt.checkpw(사용자로부터 입력 받은 패스워드.encode('utf-8'), DB에 저장된 암호화된 패스워드.encode('utf-8'))
2How to create JWT in python?
JWTはヘッダpayload.署名で構成されており、Pythonで作成する際にはペイロードとSECRET KEY、アルゴリズム情報が必要です.
import pyjwt
SECRET = SECRET_KEY
ALGORITHM = 'HS256'
acces_token =jwt.encode({'id':1}, SECRET, algorithm = ALGORITHM)
>>> pyjwt 버전에 따라 결과물이 byte 혹은 str일 수도 있음
ログイン時に、そのユーザに対して上記tokenを生成し、応答時に送信する.クライアントは、このトークンを出入り証として使用できるようになりました.暗号化ではなく符号化されているので、決して機密情報は使わず、もちろんJWTにも入らない.
初回ログイン後、ユーザが再びAPIアクセス要求を発行すると、サーバはtokenを次のように復号してアクセス権限を確認する.
そして、decode時入力
algorithm =
はalgorithms =
である.jwt.decode(access_token, SECRET, algorithms = ALGORITHM)
>>> {'id':1}
3accesstokenには寿命がある.
では、期限が切れるたびに、ユーザーは再取得する必要がありますか?
そうではありません.refresh tokenを使ってもいいです.
https://simpleisbetterthancomplex.com/tutorial/2018/12/19/how-to-use-jwt-authentication-with-django-rest-framework.html
->この文書では、サーバはaccess tokenを転送すると同時にrefresh tokenを転送します.クライアントはまずaccess tokenを使用し、有効期間が終了したらrefresh tokenを使用します.(サーバ側の具体的な提供内容はそれぞれ異なる)
refresh tokenの有効期間が終了した後、ユーザーは再び承認プロセスを経なければならない.
4
OAuthとは?
画像ソース:RFC 5849、https://www.rfc-editor.org/rfc/rfc5849
Google Identityプラットフォームまで、GoogleはOAuth 2.0プロトコルを通じて認証/認証を行います.OAuthは認証/認証標準フレームワークであり、グーグル、ココア、NAVERサーバを通じてアクセストークンを受信し、ユーザーがサードパーティサービス/APIにアクセスできるようにする.
詳しくは次編で
Reference
この問題について([HTTP]http-認証/認証について(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@mquat/HTTP-http에-대하여-인증인가-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol