認証についての知識がほぼゼロなので... #01
認証についての知識がほぼゼロだったので触る
現場でJWTという認証方式が採用されたので、ちょいとお勉強しておく
ざっくり
- 公式サイト
- 仕様 - RFC7519
- 正式名称を JSON Web Token という
- 発音は"ジョット"らしい
- トークンベースの認証
トークンベースの認証とは、ユーザーが自分のアイデンティティを確認し、代わりに一意のアクセストークンを受け取ることを可能にするプロトコルです。トークンの存続期間中、ユーザーはトークンが発行されたWebサイトやアプリにアクセスできます。同じトークンで保護されたWebページ/アプリ/リソースに再度アクセスするたびに、資格情報を再入力する必要はありません。
毎回、IDパスワードで認証する必要はありませんよ〜と
なんか検索してると「JWT 認証 使うな」とかでてくるが、
正直認証まわりの知識がゼロに近いので、メリットデメリットがよくわからない
ので一旦JWTを勉強する。
(なんかしらの脆弱性とかがあるのか?わからない...
とりあえずのざっくりイメージ
認証
/** * Synchronously sign the given payload into a JSON Web Token string * payload - Payload to sign, could be an literal, buffer or string * secretOrPrivateKey - Either the secret for HMAC algorithms, or the PEM encoded private key for RSA and ECDSA. * [options] - Options for the signature * returns - The JSON Web Token string */ export function sign( payload: string | Buffer | object, // Claim?? secretOrPrivateKey: Secret, // 秘密キー options?: SignOptions, // なんやかんやのオプション ): string;
次回接続時
/** * Synchronously verify given token using a secret or a public key to get a decoded token * token - JWT string to verify * secretOrPublicKey - Either the secret for HMAC algorithms, or the PEM encoded public key for RSA and ECDSA. * [options] - Options for the verification * returns - The decoded token. */ export function verify(token: string, secretOrPublicKey: Secret, options: VerifyOptions & { complete: true }): Jwt | string; export function verify(token: string, secretOrPublicKey: Secret, options?: VerifyOptions): JwtPayload | string;
デコードされたものが返却される、この時返されるのが、生成時に使用したpayload: string | Buffer | object, // Claim??
?
3.アクセストークンが期限切れの場合、リフレッシュトークンを検証するらしい(この辺はまた後で調べる必要ありそう
4.なんやかんや新しく生成されたトークンを返却する
アクセストークンが期限切れの場合
アクセストークンが期限切れではない場合
受け取ったアクセストークン / リフレッシュトークンをそのまま返却する
大まかな流れはこんなところ?
クライアント側の動きがよくわからないので、次はそのあたり