在使用 WIF/Geneva 的应用程序中处理使用 WCF 服务的凭据

Posted

技术标签:

【中文标题】在使用 WIF/Geneva 的应用程序中处理使用 WCF 服务的凭据【英文标题】:Handling credentials in an app consuming a WCF service with WIF/Geneva 【发布时间】:2010-12-24 19:09:54 【问题描述】:

我想知道客户端应用程序(winforms/console/其他)中关于使用 WCF 的最佳实践是什么,该 WCF 使用 WIF(过去称为日内瓦)进行了授权和身份验证。

同样在服务级别,是否可以缓存令牌,以便每次 WCF 操作都不需要访问 STS? (有关此的更多信息也很重要) 谢谢

【问题讨论】:

我收到您关于缓存的问题,但我不明白您在询问有关客户端应用程序最佳实践的问题。你能换个方式问吗? 好吧,问题的一部分是为了以防万一客户对 WIF 有一些隐藏的依赖,毕竟你不能在那里访问索赔信息,因为我不知道日内瓦/WIF(我仍然不知道怎么称呼它)我想知道在处理这个问题时是否有什么我应该或不应该做的事情 【参考方案1】:

您每次都需要发送令牌,就像您每次都需要向使用用户名和密码保护的 Web 服务发送用户名和密码一样。仅仅因为您使用的是 SAML 令牌并不会改变这一点。

但是,您可以在客户端缓存令牌 - 每个令牌都有一个有效的 from 和 valid to 与之关联,因此,如果 Web 服务没有通过断言 ID 检查每个令牌的唯一性,那么您可以缓存在客户。然而,一个编写良好的 Web 服务很可能会检查断言 ID 以阻止中继攻击。

【讨论】:

【参考方案2】:

使用 SAML 并不意味着您可以侥幸传递令牌,只是它不是签名的一部分是隐式有效负载,并且可以在同一企业中的不同应用程序之间建立共同信任。因此,您实际上可以避免使用信任维护。就缓存而言,您可以尝试使用速度。

【讨论】:

以上是关于在使用 WIF/Geneva 的应用程序中处理使用 WCF 服务的凭据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring 处理在 REST 应用程序中映射的模糊处理程序方法

在 MVC 应用程序中使用 Elmah 进行无懈可击的异常处理

如何在 Fire Base 中使用完成处理程序

使用 Postmarkapp 在 Rails 应用程序中处理电子邮件异常的最佳方法是啥?

是否可以在委托方法中使用完成处理程序 - Swift

使用完成处理程序在 Swift 中调用连续动画