【问题标题】:Passing SAML Token to WCF service from Asp.Net从 Asp.Net 将 SAML 令牌传递给 WCF 服务
【发布时间】:2012-04-10 13:20:51
【问题描述】:

当我尝试从由另一个 asp.net 应用程序 (IP) 验证的 asp.net 应用程序 (RP) 调用 WCF 服务时,我收到一条包含登录页面内容的错误消息(它正在尝试到达登录页面,因为它无法验证请求)。

身份提供者:_http://localhost/AuthenticatonWS/Login.aspx

依赖方网站:_http://localhost/RPWebsite/Default.aspx

WCF 服务:_http://localhost/RPWebsite/Service1.svc

(在我的解决方案中,我从 default.aspx.cs 调用 service1.svc)

我不希望服务是匿名的。目前该站点 (RPWebsite) 使用 STS 并信任本地身份提供者,但在生产中它可以通过 ADFS 信任任何外部身份提供者。

谁能指导我如何将令牌信息从 aspx 页面传递给服务,我确实尝试了几个来自互联网的示例,但我无法让它工作。

【问题讨论】:

    标签: wcf forms-authentication single-sign-on wif adfs2.0


    【解决方案1】:

    我认为有几种选择:

    1. 使用支持多个客户端会话的持久身份验证 Cookie。或者支持你的 RP 和 WCF 服务之间的共享会话,这样当 RP 调用 WCF 服务时,WCF 可以重新利用为 RP 发出的身份验证 cookie。老实说,我从未尝试过将其付诸实践。这只是我的理论。
    2. 创建不需要用户交互(例如输入用户名/密码)的单独身份验证服务。然后你有很多方法可以从你的 RP 调用 WCF:
      • 从您的 RP 请求身份验证服务为 WCF 颁发令牌;将令牌附加到 WCF 调用的请求标头中(例如:授权);然后调用 WCF 服务。这需要自定义 HttpModule 来接受包含 WCF 服务令牌的自定义请求标头。
      • 从您的 RP,您还可以存储用户名/密码,或可以识别用户的唯一用户身份声明;将这些信息附加到 WCF 调用的请求标头中(例如:授权);然后调用 WCF 服务。这也需要自定义 HttpModule 在 WCF 服务中接受自定义请求标头。

    我会推荐第二个选项,您可以从Dominick Baier's blog 找到更多有用的信息和指南。

    只要我的 2 美分。

    【讨论】:

      【解决方案2】:

      问题很可能是 RPWebsite 在<system><httpModules> 中使用ClaimsAuthorizationModule 或在web.config 中使用<system.webserver><modules>。如您所见,这会导致任何 Web 服务调用被重定向到 STS 进行身份验证,就好像它是一个交互式浏览器请求一样。

      或者,此模块可以添加到web.config 的 WIF 特定部分,即<microsoft.identityModel><service>,在这种情况下,此模块仅用于基于声明的 WCF Web 服务调用。您可以按以下形式添加它:<claimsAuthorizationManager type="MyNamespace.CustomClaimsAuthenticationManager, MyAssembly"/>。 (此类型必须扩展 ClaimsAuthorizationManager,如 WIF 文档页面 "ClaimsAuthenticationManager, ClaimsAuthorizationManager, and OriginalIssuer" 中所述。)

      参考:Vittorio Bertocci,“编程 WIF”,p。 43.

      【讨论】:

        猜你喜欢
        • 2014-09-24
        • 1970-01-01
        • 1970-01-01
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多