Internet Explorerで連携認証を使用してログインするときに問題が発生する(ChromeやSafariなど、他のブラウザでは動作する)
症状
Windows統合認証(WIA)を要求するOutSystemsプラットフォーム内のページにアクセスする際、Internet ExplorerおよびMicrosoft Edgeを使用してログインすることができません。他のブラウザ(Chrome、Safari、Firefoxなど)ではログインできます。
この問題は以下のように発生します。
- 正しいユーザー名とパスワードを入力します。
- 別のブラウザを使用した場合、最初の試行でログインすることができます。
- Internet ExplorerおよびMicrosoft Edgeを使用した場合、パスワードが受け付けられません。数回試行した後、エラーメッセージ「401 Unauthorized」が表示されます。
原因
これは既知の問題です。Windows統合認証でNegotiateプロトコルを有効にしている場合、OutSystemsプラットフォームが実行されているサーバーと同じWindowsドメインに接続されていないコンピュータや、当該ドメインへの接続が断続的になっているコンピュータでアクセスを試行したときに発生します。
Negotiateプロトコルでは、認証の際にKerberosチケットが使用されます。このとき、関係するすべてのコンピュータ(クライアントコンピュータおよびサーバー)がWindowsドメインコントローラと通信できる必要があります。この通信ができない場合(または、通信しても意味がない外部ユーザーなどの場合)、Negotiateプロトコルは使用できません。
デフォルトでは、Internet ExplorerおよびMicrosoft EdgeはWindows統合認証でNTLMよりもNegotiateを優先的に使用します。このため、IISでNegotiateプロトコルがアクティブになり、この誤動作が発生します。
通常、他のブラウザ(Chrome、Safari、Firefox)ではNegotiateがアクティブにならず、NTLMがデフォルトで使用されるため、認証が機能します。
解決策
通常、この問題を解決するには、IISでNegotiateプロトコルを無効にして常にNTLMを使用するようにします。問題が散発する場合や問題を確認する際に、クライアントワークステーションでNegotiateを無効にする必要があることがあります。
解決策: IISでNegotiateを無効にする:
- IISマネージャーにアクセスします。
- [サーバー Sites Default Web Site]を展開します。
- IISグループで、[Authentication]を選択します。
- [Windows Authentication]をクリックします。サイドバーに、[Providers]オプションが表示されます。表示されない場合は、最初にWindows認証を有効化すると表示されます。
- [Negotiate]プロバイダを削除します。
- 手順4でWindows認証を追加した場合、再度無効化します。
- IISリセットを実行します。
上記の手順を実行すると、Internet Explorer/Microsoft Edgeで認証が機能するようになります。
(問題を確認する)クライアントワークステーションでNegotiateプロトコルを無効にする:
- レジストリエディタを開きます([Start Run regedit.exe])。
- HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\に移動します。
- レジストリエントリEnableNegotiateを探します。
- 値を0に変更します。
- クライアントワークステーションを再起動します。
上記の手順を実行すると、変更を行ったクライアントワークステーション上のInternet Explorer/Microsoft Edgeで認証が機能するようになります
関連リソース
上記のシナリオでhttp通信について調べる場合、認証が失敗すると、サーバーから以下のようなヘッダーの初期応答が返されます。
Internet Explorer/Edgeの応答は以下のようになります(プロトコルとしてNegotiateを使用した場合)。
これによって問題が発生します(Windowsドメインコントローラと通信できないシナリオでNegotiateが失敗します)。
プロパティ
.NET/IIS上で実行されるOutSystemsプラットフォームのすべてのバージョンに適用されます。