序文データベースやその他のリソースに依存しないため、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 フォーム コンポーネントのサンプル コード
LinuxにMySQLがすでにインストールされているかどうかを確認する sudo service m...
MySQL 8.0のインストールと設定方法は参考までに。具体的な内容は以下のとおりです。ダウンロード...
1. 作成する [テーブル名] (フィールド1、フィールド2、...) 値 (値1、値2、...) ...
Linux に MySQL をインストールするには、yum インストールとソース コード コンパイ...
以前のブログのログインページを作成していたときに、この問題に遭遇しました。突然、透明な背景画像と不透...
目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...
Nginx のインストールCentOS 6.x yum にはデフォルトで nginx ソフトウェア ...
1. 前提条件インポートには require.context メソッドを使用します。vite で作成...
恥ずかしながら、このようなよく使われるチェックボックスのスタイルを変更するために、Baidu で長い...
最近、社内に Hadoop テスト クラスターを構築したいので、docker を使用して Hadoo...
目次背景DHCPの設定DHCP ファイル (動的ホスト構成プロトコル) の編集tftp 設定sysl...
序文昨日、小さなプロジェクトを書いていたときに、txt ドキュメントのデータを mysql データベ...
新しいウィンドウが開きます。 利点: ユーザーがリンクをクリックしても、現在閲覧しているコンテンツは...
で+ 時間 17:23に at> touch /mnt/file{1..9} ##アクションを...
目次最適化の第一歩: 軽量ベースイメージの使用第2段階の最適化:多段階構築Docker は、ソフトウ...