序文データベースやその他のリソースに依存しないため、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ソースコード結果を表示説明する< <未満記号また...
目次序文jQuery 以外の場合は何を使うのでしょうか? DOMとイベントAJAX リクエスト要約す...
[nslookup とは?] 】 nslookup コマンドは、Linux で非常によく使用されるネ...
以前、MySQL クエリ文の実行プロセスについての記事がありました。ここでは、更新文の実行プロセスを...
最近、電子アーカイブに取り組んでおり、バックエンドではファイルの Huawei Cloud OSS ...
目次1. 反射とは何ですか? 2. JavaScriptで反映する2.1 Reflect.get(タ...
目次背景コンテナを固定し、数字を上にスクロールすることで、スクロールホイールと同様の効果を実現します...
パート3: ❤バックエンドデータ受信を見落とす3つの方法❤ (おすすめ集)パート 2: Web フォ...
前に書いたものは複雑すぎるので、シンプルなコアにしましょう <html> <ヘッド...
しばらく前にシステムを再インストールしましたが、バックアップを取っていなかったので、コンピューター上...
まず、セキュリティ上の理由から、JavaScript はローカル リソース ファイルに直接アクセスで...
6つの効果実装コードhtml <h1>CSS 境界遷移</h1> <セ...
誰もがこんな気持ちになったことがあると思います。30 秒の広告が入った動画を見ると、とても不快に感じ...
<br />適度に画像を追加すると、Web ページがより美しくなります。 画像タグ &l...