JWT(Json Web Token)とは?


認定と承認



認証
:ユーザーを検証し、サイトに参加したメンバーを認証します(簡単に言えばログイン)
権限
:認証を取得したユーザーは、Webサイトが提供するサービスに複数の機能を使用する権限(ログイン後のアクティビティ)を付与できます.
認証を支援するテクノロジーは、セッションベースの認証方法とJWTです.

セッションベースの認証方法


1. 클라이언트가 사이트에 로그인 
2. 로그인에 성공하면 서버가 유저 세션을 만들고 메모리나 데이터베이스에 저장한다.
3. 서버가 클라이언트에게 세션 ID를 전달한다.
4. 클라이언트의 브라우저에 세션의 ID만 쿠키에 저장하게 한다.
ユーザーの情報はサーバのメモリに格納され、接続が多すぎるとサーバがクラッシュする可能性があります.規模拡張を必要としない小型プログラムの作成に適しています.

JWT


: JWT(JSON Web Token)
トークンベースの認証方式で、必要な情報をトークンボディに格納し、サーバはクライアントを格納するのではなくクライアントに送信し、クライアントが必要とする場合に認証として使用します.
デフォルトのフォーマット
xxxxx.yyyyy.zzzzz
句点をつけると3種類に分けられる.
1. Header(xxxxx)
トークンタイプまたは暗号化時に使用されるハッシュアルゴリズムの情報が含まれます.
2. payload(yyyyy)
ユーザーに関する情報が含まれています.base 64として符号化される.
3. Signature(zzzzz)
ヘッダに指定されたアルゴリズムと秘密鍵で、署名にはペイロードとヘッダが含まれます.
1. 클라이언트가 사이트에 로그인 
2. 서버는 사용자 정보를 확인한 후 Secret Key를 활용해 JWT를 생성한다.
3. 서버가 클라이언트에게 JWT를 전달한다.
4. 브라우저에 JWT를 저장한다. 
+ 이후 인증 방식 
클라이언트가 서버에게 서비스 요청과 권한을 확인하기 위해 헤더에 JWT를 전달한다. 
서명 값도 일치하고 만료 시간도 지나지 않았다면 클라이언트에게 요청에 대한 응답을 전달한다.
JWTの欠点
しかし、JWTは制御が難しく、トークン自体にユーザーの情報が含まれているため、セキュリティが脆弱です.
解決策
期限が短くて寿命が短い.ただし、期限切れが短すぎると、継続認証が必要になるという不便があります.この場合はRefresh Tokenを使用します.
ユーザーにJWTを発行し、同時にaccesstoken、refresh tokenの2種類を与える.
accesstokenは持続時間を1〜2日に短縮し、refresh tokenは2週間程度に延長する.クライアントに2つのトークンを与え、refresh tokenのみをデータベースに保存し、以降のアクセスtokenが期限切れになったときにrefresh tokenを使用して新しいアクセスtokenをリリースします.
これらのJWTの限界のため、JWTは便利な技術であるが、JWTを完全に使用する場所は多くない.

Reference


https://yonghyunlee.gitlab.io/node/jwt/
https://youtu.be/1QiOXWEbqYQ
https://velog.io/@sj950902/%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%9D%B8%EA%B0%80%EB%A5%BC-%ED%95%B4%EB%B3%B4%EC%9E%90-feat.-JWT
https://mangkyu.tistory.com/76