njs ngx_http_auth_request_module を使用しています。
私はこのようなjs関数を持っています;
function introspectAccessToken(r) {
r.subrequest("/_oauth2_send_request",
function(reply) {
if (reply.status == 200) {
r.return(204); // Token is valid, return success code
} else {
// need 302 here
}
}
);
}
ドキュメントには、「サブリクエストが 2xx レスポンス コードを返す場合、アクセスは許可されます。401 または 403 が返される場合、アクセスは対応するエラー コードで拒否されます。サブリクエストによって返されるその他のレスポンス コードはエラーと見なされます。」http://nginx.org/en/docs/http/ngx_http_auth_request_module.html
subsequest が「else」ブロックに入った場合、ユーザーに 302 を返す必要があります。
これを達成する方法はありますか?r.return(302) を設定すると、ドキュメントにあるようにブラウザーにエラー ページが表示されます。
編集:私のnginx.conf
location /my-webclient {
auth_request /_oauth2_token_introspection;
root /usr/share/nginx/html;
rewrite ^ /hmb-profile-webclient/index.html break;
}
location = /_oauth2_token_introspection {
internal;
js_content introspectAccessToken;
}
location /_oauth2_send_request {
internal;
proxy_method POST;
proxy_set_body $cookie_jwt;
proxy_pass http://my-specific-url;
}
http://my-specific-url が返されます
- 200 (jwt Cookie が有効な場合)
- 302 (戻り場所を含む)、jwt Cookie が無効な場合