狠狠撸

狠狠撸Share a Scribd company logo
础闯础齿の叠础厂滨颁认証検証结果
2021/3/2
■検証内容
?非同期通信(ajax)のリクエスト先で以下の条件でBASIC認証が
できるか、また設定の考慮点を検証する。
?BASIC認証のユーザ名、パスワードはブラウザ標準のダイアログ
で入力する。
?サーバはnginx、クライアントはjqueryのajax関数を利用
■条件
1. 画面リクエスト時のBASIC認証
2. 非同期通信(ajax)でのBASIC認証
2-1. 同一ドメインへの非同期通信
2-2. 別ドメインへの非同期通信(プリフライト無)
2-3. 別ドメインへの非同期通信(プリフライト有)
検証内容
端末(Windows)
nginx
ブラウザ
myhost.com
用意した検証環境
index.html
index2.html
BASIC認証2
BASIC認証1
myhost.com/index.html
myhost2.com
hosts
127.0.0.1 myhost.com
127.0.0.1 myhost2.com
index2.html
BASIC認証2
ajax呼び出し
(同一ドメイン)
ajax呼び出し
(別ドメイン)
ページリクエスト
1. 画面リクエスト時のBASIC認証
端末(Windows)
nginx
ブラウザ
myhost.com
index.html
index2.html
BASIC認証2
BASIC認証1
myhost.com/index.html
myhost2.com
hosts
127.0.0.1 myhost.com
127.0.0.1 myhost2.com
index2.html
BASIC認証2
ajax呼び出し
(同一ドメイン)
ajax呼び出し
(別ドメイン)
ページリクエスト
検証範囲
1. 画面リクエスト時のBASIC認証
ブラウザ nginx
nginxの設定
auth_basic "test";
auth_basic_user_file .htpasswd;
(当然ですが)通常のBASIC認証設定で問題なく動作。フローは以下。
GET /index.html
401 Unauthorized
WWW-Authenticate: Basic realm="test"
GET /index.html
Authorization: Basic XXXXX
200 OK
2-1. 同一ドメインへの非同期通信
端末(Windows)
nginx
ブラウザ
myhost.com
index.html
index2.html
BASIC認証2
BASIC認証1
myhost.com/index.html
myhost2.com
hosts
127.0.0.1 myhost.com
127.0.0.1 myhost2.com
index2.html
BASIC認証2
ajax呼び出し
(同一ドメイン)
ajax呼び出し
(別ドメイン)
ページリクエスト
検証範囲
2-1. 同一ドメインへの非同期通信
ブラウザ nginx
nginxの設定
auth_basic "test";
auth_basic_user_file .htpasswd2;
非同期通信時にブラウザの認証ダイアログが表示され問題なく動作。
フローは画面リクエストと同じ。
GET /index.html
401 Unauthorized
WWW-Authenticate: Basic realm="test"
GET /index.html
Authorization: Basic XXXXX
200 OK
2-2. 別ドメインへの非同期通信(プリフライト無)
2-2. 別ドメインへの非同期通信(プリフライト有)
端末(Windows)
nginx
ブラウザ
myhost.com
index.html
index2.html
BASIC認証2
BASIC認証1
myhost.com/index.html
myhost2.com
hosts
127.0.0.1 myhost.com
127.0.0.1 myhost2.com
index2.html
BASIC認証2
ajax呼び出し
(同一ドメイン)
ajax呼び出し
(別ドメイン)
ページリクエスト
検証範囲
2-2. 別ドメインへの非同期通信(プリフライト無)
ブラウザ nginx
nginxの設定
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,PUT,DELETE' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Headers' 'Authorization,User-Agent,Keep-Alive,Content-Type,accept,origin' always;
auth_basic "test";
auth_basic_user_file .htpasswd2;
別ドメインへの非同期通信時はCORS用のレスポンスヘッダ設定が必要。また、ajax送信側でもxhr
のwithCredentials設定が必要。
フローは同一ドメインへの非同期通信と同じ。
withCredentialsをtrueに
xhrのwithCredentialsをtrueにしないと、クロス
サイトのBASIC認証が許可されないため、認証
ダイアログが表示されない
nginxのadd_headerは401レスポンスでは機能し
ない。
?alwaysオプションをつけることで、401でもヘ
ッダがつくようになる。
GET /index.html
401 Unauthorized
WWW-Authenticate: Basic realm="test"
Access-Control-Allow-Origin:* ...
GET /index.html
Authorization: Basic XXXXX
200 OK
2-2. 別ドメインへの非同期通信(プリフライト有)
ブラウザ nginx
GET /index.html
401 Unauthorized
WWW-Authenticate: Basic realm="test"
Access-Control-Allow-Origin:https://myhost.com ...
GET /index.html
Authorization: Basic XXXXX
200 OK
別ドメインへの非同期通信時はCORS用のレスポンスヘッダ設定が必要。また、ajax送信側でもxhr
のwithCredentials設定が必要。
フローは同一ドメインへの非同期通信と同じ。
withCredentialsをtrueに
xhrのwithCredentialsをtrueにしないと、クロス
サイトのBASIC認証が許可されないため、認証
ダイアログが表示されない
nginxの設定
add_header 'Access-Control-Allow-Origin' 'https://myhost.com' always;
add_header 'Access-Control-Allow-Methods' 'GET,OPTIONS,PUT,DELETE' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Headers' 'Authorization,User-Agent,Keep-Alive,Content-Type,accept,origin' always;
auth_basic "test";
auth_basic_user_file .htpasswd2;
OPTION /index.html
200 OK
Access-Control-Allow-Origin:* ...
プリフライト有の場合、Access-Control-Allow-
Origin ‘*’指定はエラーとなるため、ドメインを
明示的に指定する必要がある。

More Related Content

础闯础齿の叠础厂滨颁认証検証结果