NGINX をプロキシ サーバーとして使用し、auth_request を使用していくつかの静的ファイルを保護する単純な認証メカニズムを実装しようとしています。
- 静的ドキュメントはdocs.mydomain.comにあります
- 電子メール/パスワードを使用してセッション トークンを生成する API は、login.otherdomain.comにあります (電子メールとセッション トークンを含む JSON が返されます)。
現在の認証プロセスは次のようになります。
ユーザーが docs.mydomain.com にアクセスしようとすると、ログイン フォームが表示されます。そこで資格情報を入力すると、電子メール/パスワードが AJAX を介して送信され、API がセッション トークンを提供し、それを Cookie に保存します。有効な認証)。
$("form").submit(function( event ) { $.ajax({ async: false, url: "http://login.otherdomain.com/api/user_sessions", method: "POST", data: { user_sessions: { email: $("#email").val(), password: $("#password").val(), } }, success: function(resp_hash) { $("form").reset() // Clearing form so email/pwd is not sent in POST request document.cookie = "x_api_session_id="+resp_hash.user_sessions.id; } }); });
次に、フォームが実際に (GET を使用して) 送信され、リクエスト (電子メールとパスワード) でクリアされたフィールドが表示されます。リクエストは docs.mydomain.com/docs に送信され、login.otherdomain.com に対してセッション トークンがチェックされ、まだ有効かどうかが確認されます。これはすべて nginx auth_request ( https://developers.shopware.com/blog/2015 /03/02/sso-with-nginx-authrequest-module/ )。このようなもの:
location /docs { auth_request /auth; } location = /auth { internal; proxy_pass $auth_api; proxy_pass_request_body off; proxy_set_header Content-Length ""; proxy_set_header X-Original-URI $request_uri; proxy_set_header X-Api-Session-Id $cookie_x_api_session_id; }
そして、ドキュメントが表示されます。エラーメッセージのクリーンな処理を実装する必要がありますが、これは最初はうまくいきます。それでも、それは醜く感じられます (特にセッション トークンを取得するための AJAX 要求)。これを行うためのより良い方法があるはずです。これをどのように改善できるかについてのアイデアはありますか? これを実装しようとしている方法にセキュリティへの影響はありますか?