web-dev-qa-db-ja.com

ブラウザで承認ヘッダーを送信する方法

基本認証を使用するWebサーバーを実装しました(Spring Securityを使用)。

URLにアクセスするときにデフォルトの認証エントリポイントを無効にします(WWW-Authentication Headerを使用して401ではなく、401を返す)、ブラウザが認証ポップアップを表示するのを防ぐことです。

私はCURLのようなJavaScriptコードとコマンドラインツールを使用してサーバーに接続することができますが、ブラウザ(Chrome&Firefox)でテストしたときに、ヘッダーを送信しないでください。

curl -v -u user:password localhost:8080/user _

取得/ユーザーHTTP/1.1
[。〜ホスト:LOCALHOST:8080
[。]承認:基本DXNLCJPWYXNZD29ZA ==
[。] user-agent:curl/7.58.0
[。]受け入れ: /

Chrome:バージョン71.0.3578.98(オフィシャルビルド)(64ビット)
[。] http:// user:password @ localhost:8080/user

取得/ユーザーHTTP/1.1
[。〜ホスト:LOCALHOST:8080
[。]接続:キープアライブ
[。]アップグレード - 不安定要求:1
[。]ユーザーエージェント:Mozilla/5.0(Windows NT 10.0; Win64; X64)AppleWebKit/537.36(khtml、gecko)Chrome/71.0.3578.98 Safari/537.36
[。] DNT:1
承認:
[。]テキスト/ HTML、アプリケーション/ XHTML + XML、アプリケーション/ XML; Q = 0.9、Image/WebP、Image/APNG、 /; q = 0.8
[。]承認符号化:GZIP、DEFLATE、BR ACCEPT-LANGUAGE:EN-AU、EN; Q = 0.9、FR-FR; Q = 0.8、FR; Q = 0.6、 en-us; q = 0.5

ブラウザが認証ヘッダを送信していない理由。

8
zeralight

実際にできるようにすることができます。クライアント側のJavaScriptの助けを借りて送信できます。使用AJAX要求]を使用します.XHRリクエストパラメータの認証トークンを渡します。

<script type='text/javascript'>
// define vars
var url = 'https://...';

// ajax call
$.ajax({
    url: url,
    dataType : 'jsonp',
    beforeSend : function(xhr) {
      // set header if JWT is set
      if ($window.sessionStorage.token) {
          xhr.setRequestHeader("Authorization", "Bearer " +  $window.sessionStorage.token);
      }

    },
    error : function() {
      // error handler
    },
    success: function(data) {
        // success handler //can redirect to any route of your wish
    }
});
</script>
 _

P.S。 - 私はからヒントを得ました。ここで、ブラウザベースのアプリケーションでJWTを保存し、その使用方法

1
kishore