[HTTP]http-認証/認証(1)について
📍 http-認証/認証の詳細
前回[httpについて]記事では,秘密鍵/公開鍵,関連アルゴリズム,SSLについて簡単にまとめた.
ちょうど今日午前中に認証/承認に関する会議を行い、内容を整理しました.
1
MarketColleyで買い物をする場合は、まず会員に加入しなければなりません.
私の口座はMarketColleyデータベースに保存されています.
登録後、商品を購入することができます.
私のパスワードは重要な個人情報なので、サーバーはそのまま保存するのではなく、暗号化してから保存します.このときhash関数を使用します.オリジナル情報さえ分かればダイジェストがわかる ただしdigestを知っていても元の情報は分からない ただし ・
これにより最終的なhash値が得られ、最終的にデータベースに保存されます.これにより,サーバはhash値でユーザを識別できる.これは
2
httpは無状態のままなので、一度ログインしてもhttpはずっと覚えていません.しかし、私たちは再ログインしません.
このとき用いられる概念は
仮にMarketColleyに会員登録してログインしたとします.
この場合、サーバはログイン成功を通知し、/457914、
私は今からこのトークンを使用してサーバに要求(API呼び出し)を発行し、サーバはこのトークンを復号することによって私の情報を検証し、アクセスを許可します.
djangoでは、bcryptというライブラリを使用して、これらの認証/認証操作を解決できます.
(22032 update)JWTは、header/payload/signantからなる
ヘッダにはhash/tokenのタイプとhashアルゴリズム情報が含まれています.
ペイロードには、ターゲット、発行者、有効期限などの情報が含まれます.
(ペイロードコンテンツでもエンコードのみなので、決して露出できない情報は入れません)
署名には、サーバが提供する秘密鍵が含まれます.したがって、この部分はサーバを復号するしかありません.(DjangoではSECRET KEY)
(220322 update)
ペイロードとは、送信されたデータを指し、正確にはheader/metaデータを除く.
(SSL証明書はCAから取得する必要があります!)
コメントサイト
:https://pypi.org/project/PyJWT/,pyjwt公式文書
: https://ko.wikipedia.org/wiki/%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85 )
: https://bcp0109.tistory.com/321
前回[httpについて]記事では,秘密鍵/公開鍵,関連アルゴリズム,SSLについて簡単にまとめた.
ちょうど今日午前中に認証/承認に関する会議を行い、内容を整理しました.
1
MarketColleyで買い物をする場合は、まず会員に加入しなければなりません.
私の口座はMarketColleyデータベースに保存されています.
登録後、商品を購入することができます.
私のパスワードは重要な個人情報なので、サーバーはそのまま保存するのではなく、暗号化してから保存します.このときhash関数を使用します.
hash 함수
生成digest
(一方向性)hash 함수
最終的にはサマリーデータも生成されるので安全ではありません.だから余分な任務はsalting
科key stretching
salting
:ハッシュを追加するための追加のランダムデータを生成する操作key stretching
:生成されたダイジェストにhash操作を加え、元のデータを取得しにくくする(攻撃者がレインボーテーブルを作成するのは難しいこれにより最終的なhash値が得られ、最終的にデータベースに保存されます.これにより,サーバはhash値でユーザを識別できる.これは
Authentication
(認証)です.2
httpは無状態のままなので、一度ログインしてもhttpはずっと覚えていません.しかし、私たちは再ログインしません.
このとき用いられる概念は
access token
であり、それを発行する各種技術の一つがJWT(JSON Web Token)である.仮にMarketColleyに会員登録してログインしたとします.
この場合、サーバはログイン成功を通知し、/457914、
私は今からこのトークンを使用してサーバに要求(API呼び出し)を発行し、サーバはこのトークンを復号することによって私の情報を検証し、アクセスを許可します.
#나의 token을 복호화하면, id가 1번으로 등록되어 있는 user임을 확인함
{
user_id = 1
}
私は権利があることが確認されたので、処理の返事をもらいました.権限がない場合、サーバは401などのエラーを返します.これはaccess token
(承認)コースです.djangoでは、bcryptというライブラリを使用して、これらの認証/認証操作を解決できます.
(22032 update)JWTは、header/payload/signantからなる
ヘッダにはhash/tokenのタイプとhashアルゴリズム情報が含まれています.
ペイロードには、ターゲット、発行者、有効期限などの情報が含まれます.
(ペイロードコンテンツでもエンコードのみなので、決して露出できない情報は入れません)
署名には、サーバが提供する秘密鍵が含まれます.したがって、この部分はサーバを復号するしかありません.(DjangoではSECRET KEY)
(220322 update)
ペイロードとは、送信されたデータを指し、正確にはheader/metaデータを除く.
{
"status":"OK",
"data": {
#payload는 아래 메세지라고 할 수 있다.
"message":"Hello, world!"
}
}
最後に、SSLは、これらのクライアントサーバ間の通信が不明瞭になるように、セッション層を再保護することができる.(SSL証明書はCAから取得する必要があります!)
コメントサイト
:https://pypi.org/project/PyJWT/,pyjwt公式文書
: https://ko.wikipedia.org/wiki/%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85 )
: https://bcp0109.tistory.com/321
Reference
この問題について([HTTP]http-認証/認証(1)について), 我々は、より多くの情報をここで見つけました https://velog.io/@mquat/HTTP-http에-대하여-인증인가テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol