JSON Web Token(JWT)、オープンJSONベースの標準(RFC 7519)は、ネットワークアプリケーション環境間で宣言を渡すために実装されました。トークンは、特に分散サイトのシングルサインオン(SSO)シナリオに適したコンパクトで安全なように設計されています。
JWTステートメントは、通常、アイデンティティプロバイダーとサービスプロバイダーの間で認証されたユーザーID情報を渡すために、リソースサーバーからのリソースの取得を促進するために使用されます。他のビジネスロジックに必要ないくつかの追加の宣言情報も追加できます。トークンは、認証または暗号化にも使用できます。

HMAC-SHA256(SecretKey, Base64UrlEncode(JWT-Header)+'.'+Base64UrlEncode(JWT-Payload))でjwtに署名base64(header).base64(payload).signature as jwtトークンとしてクライアントに戻ります。composer require tinywan/jwt use Tinywan Jwt JwtToken ;
$ user = [
' id ' => 2022 ,
' name ' => ' Tinywan ' ,
' email ' => ' [email protected] '
];
$ token = JwtToken:: generateToken ( $ user );
var_dump ( json_encode ( $ token ));出力(JSON形式)
{
"token_type" : " Bearer " ,
"expires_in" : 36000 ,
"access_token" : " eyJ0eXAiOiJAUR-Gqtnk9LUPO8IDrLK7tjCwQZ7CI... " ,
"refresh_token" : " eyJ0eXAiOiJIEGkKprvcccccQvsTJaOyNy8yweZc... "
}応答パラメーター
| パラメーター | タイプ | 説明する | 値の例 |
|---|---|---|---|
| token_type | 弦 | トークンタイプ | ベアラー |
| expires_in | int | バウチャーの有効時間、ユニット:秒 | 36000 |
| Access_token | 弦 | 資格情報にアクセスします | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
| refress_token | 弦 | 資格情報を更新する(アクセス資格情報の使用の有効期限が切れる) | XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX |
1.現在のidを取得します
$ id = Tinywan Jwt JwtToken:: getCurrentId ();2。すべてのフィールドを取得します
$ email = Tinywan Jwt JwtToken:: getExtend ();3.カスタムフィールドを取得します
$ email = Tinywan Jwt JwtToken:: getExtendVal ( ' email ' );4。トークンを更新します(リフレッシュトークンでアクセストークンを取得)
$ refreshToken = Tinywan Jwt JwtToken:: refreshToken ();5.トークンの妥当性期間の残りの時間
$ exp = Tinywan Jwt JwtToken:: getTokenExp (); 6.単一のデバイスログイン。デフォルトはオフです。 Configuration File config/plugin/tinywan/jwtを変更してください
' is_single_device ' => true,シングルデバイスログインは
APPclientフィールドの定義とクライアントWEB、ADMINWebページ)などのMOBILEOTHERサポートWEBAPI。
$ user = [
' id ' => 2022 ,
' name ' => ' Tinywan ' ,
' client ' => ' MOBILE ' ,
];
$ token = Tinywan Jwt JwtToken:: generateToken ( $ user );
var_dump ( json_encode ( $ token ));7.現在のユーザー情報(モデル)を取得する
$ user = Tinywan Jwt JwtToken:: getUser ();構成プロジェクト'user_model'は匿名関数であり、デフォルトで空の配列を返します。プロジェクトORMに従って独自のリターンモデルをカスタマイズできます
Thinkorm Configuration
' user_model ' => function ( $ uid ) {
// 返回一个数组
return think facade Db:: table ( ' resty_user ' )
-> field ( ' id,username,create_time ' )
-> where ( ' id ' , $ uid )
-> find ();
}Laravelorm構成
' user_model ' => function ( $ uid ) {
// 返回一个对象
return support Db:: table ( ' resty_user ' )
-> where ( ' id ' , $ uid )
-> select ( ' id ' , ' email ' , ' mobile ' , ' create_time ' )
-> first ();
}8。トークンクリーニング
$ res = Tinywan Jwt JwtToken:: clear ();構成アイテム
is_single_deviceがtrueある場合にのみ、有効になります。オプションのパラメーター:MOBILE、APP、WEB、ADMIN、API、OTHERなど。
9。カスタムターミナルclient
// 生成WEB令牌
$ user = [
' id ' => 2022 ,
' name ' => ' Tinywan ' ,
' client ' => JwtToken:: TOKEN_CLIENT_WEB
];
$ token = JwtToken:: generateToken ( $ user );
// 生成移动端令牌
$ user = [
' id ' => 2022 ,
' name ' => ' Tinywan ' ,
' client ' => JwtToken:: TOKEN_CLIENT_MOBILE
];
$ token = JwtToken:: generateToken ( $ user );デフォルトはWEBです
10。アクセスの有効期限をカスタマイズするトークンと更新トークン
$ extend = [
' id ' => 2024 ,
' access_exp ' => 7200 , // 2 小时
];
$ token = Tinywan Jwt JwtToken:: generateToken ( $ extend );11。トークン有効期限エラーコード
401011401012401013401014401015401021401022401023401024401025 JWTの最も一般的な署名アルゴリズム(JWA): HS256(HMAC-SHA256) 、 RS256(RSA-SHA256) 、 ES256(ECDSA-SHA256)
+--------------+-------------------------------+--------------------+
| " alg " Param | Digital Signature or MAC | Implementation |
| Value | Algorithm | Requirements |
+--------------+-------------------------------+--------------------+
| HS256 | HMAC using SHA - 256 | Required |
| HS384 | HMAC using SHA - 384 | Optional |
| HS512 | HMAC using SHA - 512 | Optional |
| RS256 | RSASSA - PKCS1 -v1_5 using | Recommended |
| | SHA - 256 | |
| RS384 | RSASSA - PKCS1 -v1_5 using | Optional |
| | SHA - 384 | |
| RS512 | RSASSA - PKCS1 -v1_5 using | Optional |
| | SHA - 512 | |
| ES256 | ECDSA using P- 256 and SHA - 256 | Recommended+ |
| ES384 | ECDSA using P- 384 and SHA - 384 | Optional |
| ES512 | ECDSA using P- 521 and SHA - 512 | Optional |
| PS256 | RSASSA - PSS using SHA - 256 and | Optional |
| | MGF1 with SHA - 256 | |
| PS384 | RSASSA - PSS using SHA - 384 and | Optional |
| | MGF1 with SHA - 384 | |
| PS512 | RSASSA - PSS using SHA - 512 and | Optional |
| | MGF1 with SHA - 512 | |
| none | No digital signature or MAC | Optional |
| | performed | |
+--------------+-------------------------------+--------------------+
The use of " + " in the Implementation Requirements column indicates
that the requirement strength is likely to be increased in a future
version of the specification.RS256とES256のみが推奨されることがわかります。
プラグインのインストールでは、デフォルトで
HS256対称暗号化アルゴリズムを使用します。
HS256は、署名と検証に同じ「secret_key」を使用します。 secret_keyがリークすると、セキュリティはまったくありません。したがって、HS256は集中認証にのみ適しており、署名と検証の両方を信頼できる当事者が実行する必要があります。
RS256シリーズは、RSA秘密キーを使用して署名され、RSA公開キーを使用して検証されます。
公開キーが漏れていても、効果はありません。秘密鍵が安全であることを確認してください。 RS256は、検証を他のアプリケーションに委任することができ、公開キーを提供するだけです。
以下は、参照のみのRSシリーズアルゴリズム生成コマンドです
ssh-keygen -t rsa -b 4096 -E SHA512 -m PEM -P "" -f RS512 .key
openssl rsa -in RS512 .key -pubout -outform PEM -out RS512 .key.pubssh-keygen -t rsa -b 4096 -E SHA354 -m PEM -P "" -f RS384 .key
openssl rsa -in RS384 .key -pubout -outform PEM -out RS384 .key.pubssh-keygen -t rsa -b 4096 -E SHA256 -m PEM -P "" -f RS256 .key
openssl rsa -in RS256 .key -pubout -outform PEM -out RS256 .key.pub理解していない学生はビデオについて学ぶことができ、詳細な指示があります。
https://www.w3cschool.cn/fastapi/fastapi-cmia3lcw.html
セキュリティ、アイデンティティ認証、承認などの問題に対処する方法はたくさんあります。そして、これはしばしば複雑で「難しい」トピックです。多くのフレームワークとシステムでは、セキュリティとアイデンティティの認証を扱うことは、多くの努力とコードのみが必要です(多くの場合、記述されたすべてのコードの50%以上を占める可能性があります)。
JWTは、すべての安全仕様を調査および学習することなく、標準的な方法でセキュリティを簡単かつ迅速に処理するのに役立ちます。
ドメインにバックエンドAPIがあるとします。また、別のドメインまたは同じドメインに別のパス(またはモバイルアプリケーション)にフロントエンドがあります。また、ユーザー名とパスワードを使用して、フロントエンドをバックエンドで認証する方法が必要です。 OAUTH2を使用して、JWTを介して構築できます。
usernameとpasswordを入力し、クリックします。usernameとpassword APIに送信します( tokenUrl="token"を宣言します)。Bearerとトークンを備えたヘッダーをAuthorization送信します。トークンにfoobarが含まれている場合、 Authorizationヘッダーの内容はBearer foobarのとおりです。注意:中间是有个空格。