[TIL]Backend Auth


インターンシップ1の承認手順


1.認証を実施する前にパスワードの暗号化を行う


1-1.暗号化ライブラリbcryptのインストール

pip install bcrypt

1-2.インストール後にpython interpriterを実行する


ライブラリの実行と導入
import bcrypt

1-3.暗号化


」bcryptの暗号化方法!
bcryptはstrデータを暗号化し、Bytesデータではない.
したがって,暗号化の際にはバイト化が必要である.
Pythonでは、符号化strはバイト(進化)であり、復号Bytesstrである.
Encode、decodeでは「UTF-8」Unicode文字仕様を使用して、私たちが認識できる形式に変換します.
password = '1234'
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
print(hashed_password)
#b'$2b$12$YFs9rh.1LgJwZuf9ibyjpuLvBoCaGX0MzedFWF2Jo0zU3lMZurZ4a'
#암호화 된 비밀번호를 얻었다. data type은 bites

type(hashed_password)
# <class 'bytes'>
この暗号化方式は一方向暗号化であり,暗号化後に復号できない方式である.

1-4.パスワードの確認


双方向確認はできませんが、bcryptのbcryptです.checkpw()メソッドでパスワードを確認できます.
new_password = '1234'
bcrypt.checkpw(new_password.encode('utf-8'),hashed_password)
#True
しかし、この方法にはルールがあります.
bcrypt.checkpw()メソッドのカッコ(入力されたパスワード、保存された暗号化パスワード)に含まれる
データ型はすべてBytesである必要があります.

2.JWT認証ツールの実装


2-1.ライブラリのインストール

pip install pyjwt

2-2.python interpriterの実行

import jwt

2-3.tokenの作成

SECRET = 'secret' #'랜덤한 조합의 키' 예제이므로 단순하게 'secret'이라고 하겠습니다.

access_token = jwt.encode({'id' : 1}, SECRET, algorithm = 'HS256')
print(access_token)
#b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MX0.-xXA0iKB4mVNvWLYFtt2xNiYkFpObF54J9lj2RwduAI'
認証のためにjwttoken、access tokenと呼ばれるメディアを作成しました.
このように発行されたトークンは再復号され、json形式でフロントエンドに送信される.

2-4.tokenの確認


次に、認証済みのユーザーのみがアクセスできるように、フロントエンドに格納されたタグをバックエンドに送信します.
私たちが発行したコインかどうかを確認しなければなりません.
この場合は双方向暗号化され,復号化できる.
header = jwt.decode(access_token, SECRET, algorithm = 'HS256')
print(header)
#{'id': 1}
decodeの結果は,符号化時に伝達されるヘッダ値{'id':1}である.