序文データベースやその他のリソースに依存しないため、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 フォーム コンポーネントのサンプル コード
例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...
MySQL データベースには増分バックアップ メカニズムはありませんが、マスター データベース内のす...
目次双方向データバインディングとは双方向データバインディングの実装データ影響ビュービューはデータに影...
この記事では、マスク レイヤーの中空化を実現する 4 つの方法を紹介します。みんなと共有し、自分用の...
1. ファントムリーディングとは何ですか?トランザクションにおいて、複数のクエリの後に結果セットの数...
目次序文解析パラメータURLパラメータを変更する要約する序文URLオブジェクトはページ側ではあまり使...
MySQL 一貫性ログMySQL データベースの電源が切れた場合、コミットされていないトランザクシ...
目次1. Reduxを選ぶ理由2. Reduxデータフロー3つの原則4. Reduxソースコード分析...
vi/vim の紹介どちらもマルチモード エディターです。違いは、vim が vi のアップグレー...
idea を使用して JSP ファイルを書き込む前に、jdk 環境 (ここでは説明しません) と対応...
1. データ感度低下の説明日常の開発ニーズでは、データの感度低下が頻繁に発生します。たとえば、ID ...
/******************** * キャラクターデバイスドライバー**********...
Windows コマンドテルネット形式: telnet IP ポート場合: テルネット 191.1....
1. VMwareのダウンロードとインストールリンク: https://www.jb51.net/s...
目次Anaconda の紹介1. ダウンロード1.1 インストールパッケージを保存するフォルダを作成...