IISでホストされるWCF OData サービスを作成し、 MS-SQL データベースからテーブルを公開しました。カスタムC#プロジェクトからサービスにアクセスしようとすると、 「NT-AUTHORITY\ANONYMOUS」がデータベースにアクセスできないというエラーが表示されます。
IISはユーザーを偽装するように構成されており、ブラウザーから同じ URL を要求するとデータが取得されるため、自分のC#アプリケーションが要求を実行しているときに、何らかの理由でユーザーが適切に偽装されていないことが疑われます。
事実は次のとおりです。
- IISでのASP 偽装が有効になっています。
- Windows-Authentication with NTLM -only は、アクティブ化された唯一の認証方法です。
- アプリケーション プールは統合 (v4.0) で実行されており、
validateIntegratedModeConfiguration
オフになっています。 - 上記のように、ブラウザを介してすべてのデータにアクセスできます。
- クライアント アプリケーションから OData メタデータにアクセスできるので、認証は基本的に機能しています。
これが私のクライアントコードのスニペットです:
var serviceContextContext = new DataServiceContext(_url);
_serviceContextContext.IgnoreMissingProperties = true;
_serviceContextContext.IgnoreResourceNotFoundException = true;
_serviceContextContext.SendingRequest += DataServiceContextContextSendingRequest;
// Here is where I get an internal server error
var response = _serviceContextContext.Execute<ODataEntity>(entitySetRequestUri);
private void DataServiceContextContextSendingRequest(object sender, SendingRequestEventArgs e)
{
var request = (HttpWebRequest)e.Request;
request.Credentials = new NetworkCredential(_user, _password,_domain);
}
フィドラーが私に与えているものは次のとおりです。
ブラウザ要求 1 - 応答は 401
GET http://localhost/WcfDataService.svc/Table/?$select=Something HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost
DNT: 1
Connection: Keep-Alive
ブラウザ要求 2 - 応答は 401
GET http://localhost/WcfDataService.svc/Table/?$select=Something HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Authorization: NTLM TlRMTVNTUAABAAAAB7IIogIAAgA0AAAADAAMACgAAAAGA9ckAAAAD0RFTEwyMDEzMDYwMUwy
DNT: 1
Connection: Keep-Alive
Host: localhost
ブラウザ要求 3 - 応答は 200 --> 動作しました!
GET http://localhost/WcfDataService.svc/Table/?$select=Zusatz HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: de-DE,de;q=0.8,en-US;q=0.5,en;q=0.3
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Host: localhost
DNT: 1
Connection: Keep-Alive
Authorization: NTLM TlRMTVNTUAADAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAABcKIogYD1yQAAAAP9oJm9T9LmMQahBlQzRd2XA==
カスタム アプリケーション リクエスト 1 - 応答は 401
GET http://localhost/WcfDataService.svc/Table/?$select=Something HTTP/1.1
User-Agent: Microsoft ADO.NET Data Services
MaxDataServiceVersion: 2.0;NetFx
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Host: localhost
カスタム アプリケーション リクエスト 2 - 応答は 401
GET http://localhost/WcfDataService.svc/Table/?$select=Zusatz HTTP/1.1
User-Agent: Microsoft ADO.NET Data Services
MaxDataServiceVersion: 2.0;NetFx
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Authorization: NTLM TlRMTVNTUAABAAAAB4IIogAAAAAAAAAAAAAAAAAAAAAGA9ckAAAADw==
Host: localhost
カスタム アプリケーション リクエスト 3 - 応答は 500 --> 失敗しました!
GET http://localhost/WcfDataService.svc/Table/?$select=Zusatz HTTP/1.1
User-Agent: Microsoft ADO.NET Data Services
MaxDataServiceVersion: 2.0;NetFx
Accept: application/atom+xml,application/xml
Accept-Charset: UTF-8
Authorization: NTLM TlRMTVNTUAADAAAAGAAYAIQAAABWAVYBnAAAAAQABABYAAAAEAAQAFwAAAAYABgAbAAAAAAAAADyAQAABYKIogYD1yQAAAAPgBZZaTO9a5O7HFjtoe2STmwAMgBmAGgAZQByAHQAZQBsAGwARABFAEwATAAyADAAMQAzADAANgAwADEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAS+24pX5KSeSdFgQ3uQ9wrwEBAAAAAAAAr9kbQ+2UzgHeWK0bawVaUgAAAAACAAQATAAyAAEAGABEAEUATABMADIAMAAxADMAMAA2ADAAMQAEABgATABhAHkAZQByADIALgBsAG8AawBhAGwAAwAyAEQARQBMAEwAMgAwADEAMwAwADYAMAAxAC4ATABhAHkAZQByADIALgBsAG8AawBhAGwABQAYAEwAYQB5AGUAcgAyAC4AbABvAGsAYQBsAAcACACv2RtD7ZTOAQYABAACAAAACAAwADAAAAAAAAAAAAAAAAAwAABAWMQ+SOQSOHP+7RN68GTo7ZpLSdYRekIYD8N3LRL0xwoAEAAAAAAAAAAAAAAAAAAAAAAACQAsAEgAVABUAFAALwBsAG8AYwBhAGwAaABvAHMAdAAuAGYAaQBkAGQAbABlAHIAAAAAAAAAAAAAAAAA
Host: localhost
応答で、次のエラー メッセージが表示されます。
Cannot open database "TEST" requested by the login. The login failed. Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
したがって、私の要求は、なりすましが適切に機能しないブラウザ要求とは何らかの形で異なると結論付けています。
それについてのヒントをいただければ幸いです。