序文データベースやその他のリソースに依存しないため、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 フォーム コンポーネントのサンプル コード
一般的に、マウスは上向きの斜め矢印として表示され、テキストの上に移動すると垂直線になり、ハイパーリン...
CSS3 では、transform 関数を使用して、テキストや画像の回転、拡大縮小、傾斜、移動という...
B-Tree インデックスに加えて、MySQL は次のインデックスも提供します。ハッシュインデックス...
CSS には、一般的には使用されない 2 つの疑似クラス、before と :after があります...
explain コマンドは、クエリ オプティマイザーがクエリの実行を決定した方法を確認する主な方法で...
以下はすべて仮想マシン上で実行されます1. pip3をインストールするsudo apt で pyth...
注意すべき点は、イベントバブリング自体の特性上、メリットだけでなくデメリットも生じるということです。...
目次準備展開プロセスRocketMQ の初体験関連する質問ヘルプドキュメント私は最近 RocketM...
文法 背景: linear-gradient(direction,color-stop1,color...
<本文> <div id="ルート"> <h1&...
ビューポートとはモバイル ブラウザは、Web ページを仮想の「ウィンドウ」(ビューポート) に配置し...
この記事の例では、マウスに従ってボールを動かすjsの具体的なコードを参考までに共有しています。具体的...
目次導入:感情のインストール:一般的な CSS コンポーネントを追加します。既存のコンポーネントにス...
目次序文1. マルチレベルのデータとイベントの配信には$attrsと$listenersを使用する2...
最初の方法: Junge のワンクリック スクリプトを使用して、LNMP 環境で MYSQL データ...