このカスタムWCFRESTサービスは、Windows認証を使用してSharepoint2010アプリケーション内でホストされています。
このサービスを.NETプロジェクト(つまり、コンソールプロジェクト)で使用する必要がありますが、クレデンシャルが私を夢中にさせています。たくさんの400 - bad request
または401 - unauthorized
応答があります(認証を含めるかどうかによって異なります)。
例を挙げましょう:
siteUri
はSPサイト(ルート/ホームページ)methodUri
のURLであり、XMLを返すサービスメソッドのURLです。
繰り返しになりますが、このサイトはWindows認証されています。ブラウザを開いてに移動すると、次のようmethodUri
になります。
リクエストエラー
サーバーでリクエストの処理中にエラーが発生しました。詳細については、サーバーログを参照してください。
しかし、次に移動するsiteUri
と、Sharepointホームページが読み込まれ、methodUri
再度参照できるようになり、XML応答が正しく取得されます。
したがって、ホームページを参照すると、Webメソッドにリクエストを送信するときに使用されるCookieがいくつか保存されているようです。Fiddlerでリクエストを確認すると、これを確認できます。
最初のmethodUri
リクエストはコードで失敗し400
、リクエストヘッダーにCookieが含まれていません。次に、ホームページ(siteUri
)を参照すると、認証自体のように見えるいくつかの要求/応答があります。応答ヘッダーには次のものが含まれます。
WWW-Authenticate: Negotiate oRswGaADCgEAoxIEEAEAAABDh+CIwTbjqQAAAAA=
Set-Cookie: WSS_KeepSessionAuthenticated={b89d78b2-063d-4ac4-810e-bde4e04a829e}; path=/
Persistent-Auth: true
そして最後に、methodUri
もう一度参照すると、最初の応答は401-Unauthorizedですが、その直後にこのヘッダーを含む別のリクエストがあります
Cookie: WSS_KeepSessionAuthenticated={b89d78b2-063d-4ac4-810e-bde4e04a829e}
Authorization: Negotiate oXcwdaADCgEBoloEWE5UTE1TU1AAAwAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAAAAAAABYAAAAAAAAAFgAAAAAAAAAWAAAABXCiOIGAbEdAAAAD37/i76Dl3jNyK8bIRz57fmjEgQQAQAAAPUXp1AtIpqEAAAAAA==
最終的に受け入れられ、サービスは対応するXMLで応答します。
したがって、ブラウザは、現在のWindowsユーザーを認証するためにこの前後の要求/応答を処理するのに十分スマートです。
私の問題は、.NET(3.5または4)でこれを行うにはどうすればよいですか。ただし、defautlクレデンシャルを使用せずに、ユーザー名、pwd、およびドメインを指定する必要があります。
これに対処するために5日間を費やし、HttpWebRequestのデフォルトのネットワーククレデンシャルを使用して機能させることができましたが、クレデンシャルを手動で設定すると(現在ログインしているユーザーと同じものを使用して)機能しません。
私はオープンソース(ruby、python)のバックグラウンドを持っており、この種のことは非常に簡単なので、このすべてが不必要に複雑になりすぎていることに気付きます(Microsoftに感謝します)。
追加情報が必要な場合は、お問い合わせください。私はこれに対する報奨金で私の評判全体を喜んで与えます。
ありがとう