1

当我尝试从由另一个 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 页面传递给服务,我确实尝试了来自互联网的几个示例,但我无法让它工作。

4

2 回答 2

0

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

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

参考:Vittorio Bertocci,“Programming WIF”,p. 43.

于 2012-03-27T05:44:30.233 回答
0

我认为有几种选择:

  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 的博客中找到更多有用的信息和指南。

只是我的2美分。

于 2013-10-15T11:13:39.383 回答