- 記事一覧 >
- ブログ記事
【AuthSchemes】Microsoft Edgeだけ認証ダイアログが出ない場合がある件
はじめに
世の中には、
「認証ダイアログが出ない!」
「Microsoft Edge のみ再現。その他のブラウザ、Chrome, Firefox では再現しない!」
という人が存在します。
・・・
ちょっと分かる人は、
『プロキシかな?』
とか
『Microsoft Edge と Chrome は同じ Chromium(クロミウム)エンジンで挙動に違いは無いはず。んなわけない。』
という思考になってしまうかもしれませんが、いるんです!実在します!
・・・
いきなり結論から書きますと、
原因は、グループ ポリシー(サポートされている認証スキーム)の設定によって、そうなるという話です。
今回、現象・原因・回避方法の他に、実体験できる環境作成手順についても書いていこうと思います。
現象は同じでも別の原因である可能性はあります。
【検証環境】
Windows 11 Pro 23H2
Microsoft Edge 120.0.2210.61
現象
・認証ダイアログが出ない
・認証ダイアログが出るはずのサイトにアクセスすると、"Unauthorized" の画面になる
・ユーザー名、パスワードを間違えたわけではない(そもそも認証ダイアログが出ないし...。)
・Microsoft Edge のみ再現。その他のブラウザ、Chrome, Firefox では再現しない。
・Microsoft Edge は最新(記事投稿時:120.0.2210.61)
という状況です。
"Unauthorized" は、Apache デフォルトの場合です。
サーバー種類、設定によっては、全く別の文言の可能性があります。
具体的な動作内容としては、以下のような動作になります。
Microsoft Edge 以外は、【期待される動作】のままです。
原因
冒頭書いたように、グループ ポリシーの「サポートされている認証スキーム」が原因です。
gpedit.msc で見ると、以下の階層のポリシーになります。
ユーザーの構成
管理用テンプレート
Microsoft Edge
HTTP 認証
サポートされている認証スキーム
ちなみに、英語では、
User Configuration
Administrative Templates
Microsoft Edge
HTTP authentication
Supported authentication schemes
です。
ここの値が設定されていて、digest,ntlm,negotiate
のようにbasic
が設定されていないと、ベーシック認証(ブラウザの認証ダイアログで認証するタイプ)が無効になり、認証ダイアログが表示されなくなります。
この設定は、Microsoft Edge のみに効くため、Chrome では問題ありません。
gpedit.msc での設定内容は、レジストリに反映されるため、レジストリを直接確認することもできます。
レジストリの位置は、[HKEY_USERS\S-1-5-21-34******05-41******01-26******81-1001\SOFTWARE\Policies\Microsoft\Edge]
のような場所で、"AuthSchemes"="digest,ntlm,negotiate"
のレジストリが設定されています。
regedit.exe で見ると、以下のような設定が確認できます。
http://
のときに、ベーシック認証を無効にできる設定 HTTP の Basic 認証を許可する もありますが、今回、そちらには触れません。
"AuthSchemes" がレジストリに存在するかどうか PowerShell で確認できます。
管理者権限で PowerShell を開いて、以下のコードをペーストすると、確認できます。
$path = "HKCU:\SOFTWARE\Policies\Microsoft\Edge"
if(Test-Path $path) {
$value = Get-ItemPropertyValue -Path $path -Name "AuthSchemes"
$value
} else {
Write-Output "$path does not exist"
}
digest,ntlm,negotiate
HKCU:\SOFTWARE\Policies\Microsoft\Edge does not exist
回避方法
Active Directory で一元管理されていて、
gpedit.msc の起動ができないか、変更が許可されていない可能性があります。
その場合は、Active Directory の管理者に依頼するしかないです。
今回は、自分でポリシーの変更ができるものとします。
gpedit.msc で
ユーザーの構成
管理用テンプレート
Microsoft Edge
HTTP 認証
まで開いていき、
サポートされている認証スキーム
をダブルクリックします。
未構成 をクリックして、OK をクリックします。
あるいは、
サポートされている認証スキーム のところに、basic
を追加して設定し、OK をクリックします。
サポートされている認証スキーム は、HTTP 認証スキームを指定するための設定です。この設定は、
basic
,digest
,ntlm
,negotiate
の各値を使用して構成できます。値が複数ある場合はコンマで区切ります。
basic
,digest
,ntlm
,negotiate
の各値は以下のような意味を持っています。
basic
:ベーシック認証(Basic 認証)
digest
:ダイジェスト認証(Digest 認証)
ntlm
:NTLM 認証(NT LAN Manager authentication)
negotiate
:クライアントとサーバーが相互にサポートする認証プロトコルを選択するためのプロトコル。Negotiate は、クライアントとサーバーが使用できる認証スキームのリストを持ち、最もセキュリティの高いものを選択。通常は、Kerberos が利用可能な場合はそれを使用し、利用できない場合には NTLM を使用。
あるいは、
これで、対策完了です。OS の再起動は必要ありません。ブラウザを再起動して、次にアクセスすると、ベーシック認証が有効になっていて、現象が再現しなくなります。
ブラウザの再起動に関しては、見た目は起動していなくても、タスク マネージャーで完全に終了させる必要があります。
再現環境作成手順
Web サーバー側
OS は、Debian Bullseye with Raspberry Pi Desktop 2022-07-01(Debian version: 11) 前提です。
今回、認証を必要とするサーバーは、Apache & PHP とします。
全てのページで、ベーシック認証がかかるものとします。/info.php
へのアクセスで phpinfo();
の実行結果が表示されます。
ベーシック認証がかかりさせすれば、OS、Web サーバーは何でも良いです。
全て root 権限で実行しています。そのため、sudo は省略しています。
# apt -y update
# apt -y install apache2
# apt -y install php-common libapache2-mod-php php-cli
# systemctl restart apache2
# vi /var/www/html/info.php
<?php
phpinfo();
# htpasswd -c /etc/apache2/htpasswd testuser
New password:
Re-type new password:
Adding password for user testuser
# cat /etc/apache2/htpasswd
testuser:$apr1$f3dnNmpo$aG9N7Ix8fr/80h6Tth9BY.
# chown www-data: /etc/apache2/htpasswd
# chmod 600 /etc/apache2/htpasswd
/apache2/
の部分は、環境によっては、/httpd/
だったりします。
www-data
の部分は、環境によっては、apache
だったりします。
# vi /etc/apache2/sites-available/000-default.conf
<VirtualHost *:80>
# のすぐ下に追記
# ↓
<Directory "/var/www/html">
AuthType Basic
AuthName "auth"
AuthUserFile /etc/apache2/htpasswd
Require valid-user
</Directory>
# systemctl restart apache2
ここで、/info.php
にアクセスすると、認証がかかります。
認証がかかったら、Web サーバー側の準備は完了です。
ブラウザ側
実は、該当のグループ ポリシーの「サポートされている認証スキーム」は、標準状態では表示されません。ユーザーの構成 → 管理用テンプレート の中に Microsoft Edge がありません。
Microsoft Edge Enterprise ランディング ページ に移動して、Microsoft Edge ポリシー テンプレートファイルをダウンロードし、追加が必要です。
Microsoft Edge Enterprise ランディング ページ に移動して、Windows 64-bit のポリシーをダウンロード をクリックします。
MicrosoftEdgePolicyTemplates.cab がダウンロードされるため、展開します。
すると、中に MicrosoftEdgePolicyTemplates.zip が入っているため、これを展開します。
展開後、windows\admx
フォルダまで行きます。
windows\admx\msedge.admx
windows\admx\msedgewebview2.admx
windows\admx\msedgeupdate.admx
を%systemroot%\PolicyDefinitions\
(C:\Windows\PolicyDefinitions\
)へ
windows\admx\ja-JP\msedge.admx
windows\admx\ja-JP\msedgewebview2.admx
windows\admx\ja-JP\msedgeupdate.admx
を%systemroot%\PolicyDefinitions\ja-JP\
(C:\Windows\PolicyDefinitions\ja-JP\
)へ
コピーします。
準備完了です。
gpedit.msc を起動します。
ユーザーの構成 → 管理用テンプレート の中に3項目追加されていて、Microsoft Edge が追加されています。
ユーザーの構成
管理用テンプレート
Microsoft Edge
HTTP 認証
まで開いていき、
サポートされている認証スキーム
をダブルクリックします。
有効 をクリックして、
サポートされている認証スキーム のところに、digest,ntlm,negotiate
を設定し、OK をクリックします。
これで、準備完了です。OS の再起動は必要ありません。ブラウザを再起動して、次にアクセスすると、ベーシック認証が無効になっていて、現象が再現するのを確認できます。
ブラウザの再起動に関しては、見た目は起動していなくても、タスク マネージャーで完全に終了させる必要があります。
その他、宣伝、誹謗中傷等、当方が不適切と判断した書き込みは、理由の如何を問わず、投稿者に断りなく削除します。
書き込み内容について、一切の責任を負いません。
このコメント機能は、予告無く廃止する可能性があります。ご了承ください。
コメントの削除をご依頼の場合はTwitterのDM等でご連絡ください。