【问题标题】:What is the standard way of an active client passing a SAML token to a relying party?活动客户端将 SAML 令牌传递给依赖方的标准方式是什么?
【发布时间】:2013-07-08 21:03:26
【问题描述】:

我有一个移动客户端 (iOS) 和一个 Web 服务(WCF、.NET 4.5),我正在使用 Windows Identity Foundation 和 SAML 令牌保护它们。我的客户从自定义 STS 请求 SAML 令牌,一旦我的依赖方拥有该令牌,我就能够反序列化它并验证其声明。

但是,我不确定是否有标准方法可以将令牌从客户端发送到依赖方?我猜令牌应该在每个请求的标头中,但是在传递这种类型的令牌时是否有一个通用的标头或 cookie 名称?

我可以看到您希望它在所有情况下如何不同,以防多个令牌来回传递,但我想知道这样做的标准是什么。

【问题讨论】:

    标签: asp.net ios wcf wif


    【解决方案1】:

    如果 RP 是 WCF,那么是的.. 绑定都负责这一点。如果 RP 是其他东西(例如 HTTP/REST 服务),则由您和您的协议来发送它。所以是的,您可以将其作为 HTTP 标头发送。然后,RP 需要知道如何查找令牌并对其进行验证。这在今天的 WebAPI 中不存在,因此您可以使用 Thinktecture IdentityModel 安全库来接受和验证 HTTP 标头中的令牌:

    http://thinktecture.github.io/Thinktecture.IdentityModel.45/

    【讨论】:

    • 我同意 WCF 绑定应该解决这个问题,但我想知道如何以绑定能够正常工作的方式在非 .NET 客户端上提交令牌。有趣的是,WebAPI 还没有对此提供任何支持 - 我将不得不查看您的链接,以备将来我将要做的工作。
    【解决方案2】:

    更合乎逻辑的做法是传递一个 JWT 令牌(在 nuget 上有一个官方的 Microsoft 实现)。它们要小得多,并且更容易在非 .NET 客户端(例如 JavaScript ...)上处理。由于它们更小,您可以在 http 标头中传递它们;通常是“授权空间承载空间编码的 JWT 令牌”。然后,在您的 wep api 中,您需要一个 httpfilter 来解释此数据并授权或拒绝呼叫。 当然,您可以对 SAML 令牌执行相同的操作。您将需要以某种方式对其进行编码,这将大大增加您的通信量。

    【讨论】:

    • 我不会说这是更合乎逻辑的事情...... JWT只是序列化格式,客户端不应该关心这个。客户端只是检索令牌并将其发送到 RP。客户端不应该读取它 - 事实上在某些情况下它不能读取它,因为令牌将被加密。我同意大小会有所不同,但我的令牌目前相当小。
    • JWT 确实只是一种序列化格式。在我的例子中,它最终缩小了 3 倍,并且可以被 JavaScript 移动客户端读取。我的 JWT 令牌未加密(仅签名)并且客户端未验证签名(Web api 会)。无论如何,客户端仍然能够处理到期等...
    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2017-10-18
    • 2021-11-22
    • 2015-03-13
    • 2021-06-24
    • 2013-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多