TIL 33|認証と承認


認定と承認


認証とは何ですか.なぜ認証するのですか.
認証は、ユーザーIDを確認する(=ユーザーIDとパスワードが一致する)ステップです.
会員を識別し、誰がどのように書いたのかを追跡し、データを得ることができます.
認証に必要なのは、アイデンティティ、Eメールアドレス、パスワードなどです.
ログインプロセス
1.ユーザIDと非番号の生成
2.ユーザはDBに暗号化されて保存されていない.
3.ユーザーのログイン->ユーザー名とパスワードの入力
4.ユーザーが入力したパスワードを暗号化し、データベース内のユーザーパスワードと比較する.
5.一致する場合、ログインは成功しました
6.ログイン成功後 クライアントにaccesstokenを送信します.
7.ユーザーのログインが成功すると、 アクセスポイントを追加し、リクエストをサーバに送信すると、毎回ログインする必要がなくなります.

1.パスワード管理(法的強制)


国が提案した一般的なパスワードとアルゴリズムを利用して、個人情報を暗号化管理します.
では、パスワードをどのように管理しますか?
データベースに保存すると、ユーザーのパスワードはそのまま保存されません.
作成した開発者/社内ユーザも、個人情報を暗号化して復元できません.

2.暗号化はどうする?


1)一方向ハッシュ(リカバリ不可)


パスワードパスワードパスワードは、通常、一方向ハッシュ関数を使用します.
双方向暗号化は、暗号化データを復号する暗号化方式である.
一方向暗号化は双方向暗号化とは異なり、暗号化データを復号できない暗号化方式である.
1つの値を1つの方向に入力します.1つの値は(1つの入力、1つの出力)です.
しかし、アウトシュートが出た場合、アウトシュートは推定できない.
しかし,脆弱性があり,Rainbow tableという名前のサイトが出現したため,ハッシュ値を推定できるサイトが存在した.

2) salting & keyStretching


単純なハッシュ値はハッカーに攻撃されやすいため、saltingの考えが生まれた.(ハッカー攻撃の時間を稼ぐため)
一方向ハッシュ関数の弱点を保護するために、通常、2つの補足点が使用される.
Salting? 入力したパスワードを任意に生成した文字列(salt)と結合して復号します.(もちろん、ハッシュ値と塩値を一緒に保存して比較する)
keyStretching? ハッシュ値を連続/複数回ハッシュし、リカバリが困難になります.
Bcrypt
SaltingとKeyStretchingの代表的なライブラリ(オープンソース/コードブロック)
これは,上記の概念を実用化しやすい代表的なライブラリである.

3.認可は何ですか。(Authorization)


ユーザがサーバにログインした後、他の任意の機能を使用する場合、ユーザが要求要求を実行する権利のあるユーザであるかどうかを確認します.
承認プロセス
1.認証プロセスによる アクセスポイントを生成します. accesstokenには、ユーザー情報を表示できる情報(例えばuserid)が含まれている必要があります.
2.プレイヤーがリクエストを送信する場合 追加accesstoken送信.
3.サーバ上でユーザから送信された アクセスポイントを復号します.
4.データを復号してユーザidを取得する.
5.useridを使用して、データベースでユーザーの権限を確認します.
6.プレイヤーは要求を処理するのに十分な権限を持っている.
7.ユーザに権限がない場合、許可されていない応答(401)または他のエラーコードが送信される.
ステータスなしの性質を持ち、レポートにメタデータ確認を送ります.
コインの発行時間は?初めてログインに成功した時、BEが送ってくれます.
FEが他の機能を所有して再要求すると、要求が一緒に送信される.

4. JSON Web Token (JWT -> Token)


前述のように、ユーザログインが成功すると、 accesstokenという暗号化されたユーザ情報をrequestに送信します.
その後、サーバは アクセスポイントを復号することによって、対応するユーザ情報が得られる.
たとえば、
access token eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E 復号化には、次の情報が表示されます.
	
        {
		    user_id = 1 
		}
得られたプレイヤーIDを解読することで、そのプレイヤーが誰であるかを知ることができる.
また,このプログラムの目的は,そのユーザが毎回ログインすることを防止することである.
アクセスポイントを生成する方法はいろいろありますが、その中で最も広く使われている技術の一つがJWT(JSON Web Tokens)です.
JWTとは,名前の通り,ユーザ情報を含むJSONデータを暗号化してクライアントとサーバとの間で交換するものである.

5.JSON Web Token内部



JSON Web Tokenは、Header、Playload、Signatureからなる.
1.タイトル
(暗号化されていないので復号して見ることができます)
ヘッダには、トークンタイプとハッシュアルゴリズム情報が含まれます.
ヘッダの内容はBASE 64で符号化され、暗号化とは異なるJWTの第1の部分に記録される.
2.内容
(暗号化されていないので復号して見ることができます)
公開クレーム、満期時間を表すexp
およびクライアントとサーバの間で協議する際に使用される専用クレーム.
2つの要素を組み合わせ/合成し、BASE 64を2番目の要素として符号化する
3.署名
これが私たちのサイトだと彼らに伝えなければなりません.
FEが持ってきたとき、BEがまた怖くなったので、何番プレイヤーかを確認しました.私たちのサイトは正しいです.