2013-02-01 18 views
0
身份验证多种服务

我有以下情形:在Silverlight

  1. WCF服务在同一地点为Silverlight应用程序(将其称为“数据服务”)
  2. 网站的WCF服务和Silverlight主页坐落在保护与窗体身份验证
  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中的位置,以便我们可以在RestSharp调用之前抓取它们并在之后恢复它们?

感谢您的输入!

回答

0

啁​​啾 * chirp *蟋蟀在这里响亮。

无论如何,我们最终提出的解决方案是将所有对第三方REST服务的调用转移到我们自己的服务中。这使得Silverlight不会将凭据丢失到我们的服务中(因为我们从未从Silverlight调用其他服务)。

我希望这能帮助那些在某一天遇到此事的人。