1

NGINX をプロキシ サーバーとして使用し、auth_request を使用していくつかの静的ファイルを保護する単純な認証メカニズムを実装しようとしています。

  • 静的ドキュメントはdocs.mydomain.comにあります
  • 電子メール/パスワードを使用してセッション トークンを生成する API は、login.otherdomain.comにあります (電子メールとセッション トークンを含む JSON が返されます)。

現在の認証プロセスは次のようになります。

  1. ユーザーが 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;
             }
       });
     });
    
  2. 次に、フォームが実際に (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 要求)。これを行うためのより良い方法があるはずです。これをどのように改善できるかについてのアイデアはありますか? これを実装しようとしている方法にセキュリティへの影響はありますか?

4

1 に答える 1

0

クラスター内のプライベート サービスにアクセスするために数日前に同じ要件があり、同様のソリューションを考え出しました。セッショントークンを認証して取得するために、クライアント側でAJAXリクエストを使用して単純な認証サーバーを実装しました。

セキュリティに関しては、リクエストが HTTPS を通過する限り、すべて問題ないはずです。しかし、私が心配していたのは、認証システム自体が脆弱で、単純な LDAP バインド操作でした... TOTP を使用して 2 要素認証をセットアップすることにし、懸念の大部分が解決されました。大部分の攻撃を回避するのに十分安全です。少なくとも、量子コンピューターが登場するまでは!

それが役に立ったことを願っています!

于 2016-12-19T22:08:52.127 に答える