1. 記事一覧 >
  2. ブログ記事
Windows
category logo

【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 起動


サポートされている認証スキーム


サポートされている認証スキームの設定内容にbasicが無い


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 で見ると、以下のような設定が確認できます。

regedit.exe で見る→AuthSchemes

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

PowerShellで確認結果例


回避方法

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 を使用。

サポートされている認証スキーム 未構成


あるいは、


サポートされている認証スキーム basicを追加


これで、対策完了です。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
/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
/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が無い


Microsoft Edge Enterprise ランディング ページ に移動して、Microsoft Edge ポリシー テンプレートファイルをダウンロードし、追加が必要です。


Microsoft Edge Enterprise ランディング ページ に移動して、Windows 64-bit のポリシーをダウンロード をクリックします。 Windows 64-bit のポリシーをダウンロード


MicrosoftEdgePolicyTemplates.cabダウンロード


MicrosoftEdgePolicyTemplates.cab がダウンロードされるため、展開します。
すると、中に MicrosoftEdgePolicyTemplates.zip が入っているため、これを展開します。
展開後、
windows\admx フォルダまで行きます。
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\)へ コピーします。

PolicyDefinitionsへコピー


準備完了です。
gpedit.msc を起動します。
ユーザーの構成管理用テンプレート の中に3項目追加されていて、Microsoft Edge が追加されています。

管理用テンプレート/Microsoft Edgeが追加されている


ユーザーの構成
 管理用テンプレート
  Microsoft Edge
   HTTP 認証
まで開いていき、
サポートされている認証スキーム
をダブルクリックします。

サポートされている認証スキーム


有効 をクリックして、
サポートされている認証スキーム のところに、
digest,ntlm,negotiate
を設定し、OK をクリックします。

サポートされている認証スキーム のところにdigest,ntlm,negotiateを設定


これで、準備完了です。OS の再起動は必要ありません。ブラウザを再起動して、次にアクセスすると、ベーシック認証が無効になっていて、現象が再現するのを確認できます。

ブラウザの再起動に関しては、見た目は起動していなくても、タスク マネージャーで完全に終了させる必要があります。


認証ダイアログ 今回の動作 動画


PowerShellで確認結果例

loading...