基本認証を使用する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
ブラウザが認証ヘッダを送信していない理由。
実際にできるようにすることができます。クライアント側の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>
_