0

次のシナリオがあります。

  1. Silverlight アプリと同じサイトにある WCF サービス (これを「データ サービス」と呼びます)
  2. WCF サービスと Silverlight ホスト ページが置かれている Web サイトは、フォーム認証で保護されています。
  3. WCF サービスは、匿名アクセスを許可するフォルダーにあります
  4. Silverlight ホスティング ページが、匿名アクセスを許可しないフォルダーにある
  5. ユーザーがフォーム認証を介してログインすると、Silverlight アプリにアクセスできるようになり、WCF/データ サービスが呼び出されると、フォーム認証ユーザーが WCF サービスによって正しく認識されます。

全体として、この設定はうまく機能します。ただし、基本認証を必要とするサードパーティの REST サービスを呼び出しており、RestSharp を使用してそのサービスを呼び出しています。そのコードの例は次のとおりです。

Dim url As String = ServicePrefix & ServiceBaseAddress
Dim client As New RestSharp.RestClient(url)
client.Authenticator = New HttpBasicAuthenticator(AccountSID, AuthToken)
Dim request As New RestSharp.RestRequest("Accounts/" & AccountSID & "/SMS/Messages.xml", RestSharp.Method.POST)
request.AddParameter("From", fromPhone)
request.AddParameter("To", toPhone)
request.AddParameter("Body", message)

syncContext = SynchronizationContext.Current
Dim ia = client.ExecuteAsync(request, AddressOf HandleSMSResponse)

サード パーティ サービスへの呼び出しが正常に返され、メッセージが送信されると、Silverlight は HttpContext で正しいユーザーを送信しなくなるため、WCF サービスはフォーム認証ユーザーを識別しなくなります。

私たちの現在の考えでは、RestSharp は制御すべきではないものを制御している、または状態を適切に復元していません。セキュリティ認証情報が Silverlight のどこに保存されているか知っている人はいますか?

ご意見ありがとうございます。

4

1 に答える 1

0

チャープ*チャープ* ここではコオロギがうるさいです。

いずれにせよ、私たちが最終的に思いついた解決策は、サードパーティの REST サービスへのすべての呼び出しを独自のサービスに移動することでした。これにより、Silverlight がサービスに対する資格情報を失うことはありませんでした (Silverlight から別のサービスを呼び出すことがないため)。

これがいつかこれにつまずいた人の助けになることを願っています。

于 2013-02-13T15:55:51.087 に答える