Skip to main content

 

 

 

 
Language:
 
 
 
OutSystems

Internet ExplorerまたはEdgeの統合認証でのログインの問題

症状

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がデフォルトで使用されるため、認証が機能します。

原因を確認する

クライアントワークステーションでNegotiateプロトコルを無効にして、上記の問題であることを確認します。

1.レジストリエディタを開きます([Start > Run > regedit.exe])。

2.HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\に移動します。`

3.レジストリエントリEnableNegotiateを探します。

4.値を0に変更します。

5.クライアントワークステーションを再起動します。

上記の手順を実行すると、変更を行ったクライアントワークステーション上のInternet Explorer/Microsoft Edgeで認証が機能するようになります

解決策: IISでNegotiateプロトコルを無効にする

この問題を解決するには、IISでNegotiateプロトコルを無効にして常にNTLMを使用するようにします。問題が散発する場合や問題を確認する際に、クライアントワークステーションでNegotiateを無効にする必要があることがあります。

1.IISマネージャにアクセスします。

2.[<サーバー> > Sites > Default Web Site]を展開します。

3.IISグループで、[Authentication]を選択します。

4.[Windows Authentication]をクリックします。サイドバーに、[Providers]オプションが表示されます。表示されない場合は、最初にWindows認証を有効化すると表示されます。

5.[Negotiate]プロバイダを削除します。

6.手順4でWindows認証を追加した場合、再度無効化します。

7.IISリセットを実行します。

上記の手順を実行すると、Internet Explorer/Microsoft Edgeで認証が機能するようになります。

関連リソース

上記のシナリオでhttp通信について調べる場合、認証が失敗すると、サーバーから以下のようなヘッダーの初期応答が返されます。

Internet Explorer/Edgeの応答は以下のようになります(プロトコルとしてNegotiateを使用した場合)。

これによって問題が発生します(Windowsドメインコントローラと通信できないシナリオでNegotiateが失敗します)。