次のシナリオがあります。
- Silverlight アプリと同じサイトにある WCF サービス (これを「データ サービス」と呼びます)
- WCF サービスと Silverlight ホスト ページが置かれている Web サイトは、フォーム認証で保護されています。
- WCF サービスは、匿名アクセスを許可するフォルダーにあります
- Silverlight ホスティング ページが、匿名アクセスを許可しないフォルダーにある
- ユーザーがフォーム認証を介してログインすると、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 のどこに保存されているか知っている人はいますか?
ご意見ありがとうございます。