在Silverlight中对多个服务进行身份验证

时间:2013-02-01 21:22:47

标签: wcf silverlight-5.0 restsharp

我有以下情况:

  1. 与Silverlight应用程序位于同一站点的WCF服务(称之为“数据服务”)
  2. WCF服务和Silverlight主机页面所在的网站受表单身份验证保护
  3. WCF服务位于允许匿名访问的文件夹中
  4. Silverlight托管页面位于不允许匿名访问的文件夹中
  5. 当用户通过表单身份验证登录时,Silverlight应用程序变为可访问状态,并且在调用WCF /数据服务时,WCF服务正确地看到表单身份验证用户。
  6. 总的来说,这种设置效果很好。但是,我们正在调用需要基本身份验证的第三方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调用之前获取它们并在之后恢复它们?

    感谢您的投入!

1 个答案:

答案 0 :(得分:0)

Chirp * chirp *蟋蟀在这里很响亮。

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

我希望有一天能帮助那些偶然发现这一点的人。