序文データベースやその他のリソースに依存しないため、jwt 自体もステートレスです。したがって、認証サービスは Java や他の言語に基づいていません。代わりに、Lua スクリプトを使用して nginx を強化します。Lua スクリプトを使用してトークンが有効かどうかを確認します。無効な場合は、直接 401 を返します。有効な場合は、そのまま転送します。 Lua スクリプトここで秘密のある大きな落とし穴に遭遇しました。最初は、Java バックエンド プロジェクトからキーを直接コピーしましたが、 nignx.conf の設定--nginx-jwt.lua ローカル cjson = "cjson" が必要です ローカル jwt = "resty.jwt" が必要です --あなたの秘密 ローカルシークレット = "yoursecrethere" --認証不要の API リスト local no_need_token_api_list = {'/api/register', '/api/login'} ローカル関数 ignore_url (val) インデックスの場合、ipairs(no_need_token_api_list)の値を実行します (値 == val) の場合 真を返す 終わり 終わり 偽を返す 終わり ローカル M = {} 関数 M.auth() ignore_url(ngx.var.request_uri)の場合 戻る それ以外 終わり -- 認証リクエストヘッダーが必要 ローカル auth_header = ngx.var.http_Authorization auth_header == nilの場合 ngx.log(ngx.WARN, "認証ヘッダーがありません") ngx.exit(ngx.HTTP_UNAUTHORIZED) 終わり --ベアラートークンが必要 ローカル _, _, トークン = string.find(auth_header, "Bearer%s+(.+)") トークン == nil の場合 ngx.log(ngx.ERR, "トークンがありません") ngx.exit(ngx.HTTP_UNAUTHORIZED) 終わり --decode_base64 はバックエンドと一致しています local jwt_obj = jwt:verify(ngx.decode_base64(secret), token) jwt_obj.verified == falseの場合 ngx.log(ngx.ERR, "無効なトークン: ".. jwt_obj.reason) ngx.ステータス = ngx.HTTP_UNAUTHORIZED ngx.say(cjson.encode(jwt_obj)) ngx.header.content_type = "application/json; charset=utf-8" ngx.exit(ngx.HTTP_UNAUTHORIZED) 終わり 終わり 戻るM Dockerfileの設定ワーカープロセス 1; イベント { ワーカー接続 1024; } http { lua_package_path "/opt/lua-resty-jwt/lib/?.lua;;"; アップストリームバックエンド { サーバー 192.168.1.1:8080; } アクセスログ /logs/nginx_access.log; error_log /logs/nginx_error.log; サーバ { 聞く 80; #バックエンド API インターフェース プロキシの場所 /api/ { luaブロックによるアクセス { ローカルオブジェクト = require('nginx-jwt') obj.auth() } proxy_pass http://backend; proxy_redirect オフ; proxy_set_header ホスト $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } } JWT 検証に Nginx と Lua を使用する方法についてはこれで終わりです。JWT 検証に Nginx と Lua を使用する方法についての詳細は、123WORDPRESS.COM の過去の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL データベースの集計クエリと結合クエリ操作
>>: HTML フォーム コンポーネントのサンプル コード
効果: CSS スタイル: <スタイル タイプ="text/css">...
序文: vue3.0の要素フレームワークを使用します。要素はvue2.0をサポートしており、vue3...
Dockerコンテナ接続1. ネットワークポートマッピングPythonアプリケーション用のコンテナを...
この記事では、例を使用して、replace と regexp を使用して MySQL で正規表現を置...
テーブルが広い場合は、あふれてしまう可能性があります。たとえば、左と右の 2 つの div がありま...
最近、HTML を再度学習しており、これは HTML に対する新たな理解と言えます。これを過小評価し...
目次1. props/$emit導入コードサンプル2.Vスロット導入コードサンプル3.$refs/ ...
問題の説明(キープアライブとは何か)キープアライブ 名前の通り、アクティブな状態を維持します。誰が活...
任意の数のステートメントを関数を通じてカプセル化することができ、いつでもどこでも呼び出して実行できま...
先ほど、Docker を使用して SpringBoot プロジェクトを簡単にデプロイし、Docker...
著者は1年以上マイクロフロントエンドプロジェクトに取り組んできました。チームは10個のマイクロアプリ...
CentOS7 64でのMySQL5.6.40のインストール手順1) 以前にインストールしたMySQ...
目次序文質問原理テスト序文プログラムを作成するときに、読み込みの進行状況やアップロードの進行状況など...
目次序文vue-cli 2.0 バージョンvue-cli 3.0 バージョン要約する序文vue-cl...
私は全体のプロセスを 4 つのステップに分けます。 JDKをダウンロードしてインストールするTomc...