【问题标题】:What is the SessionSecurityToken SecurityKeys?什么是 SessionSecurityToken 安全密钥?
【发布时间】:2013-04-20 18:07:27
【问题描述】:

我想验证 STS 颁发的 SessionSecurityToken。通过验证,我的意思是证明令牌不是精心设计的,并且验证令牌是从 STS 发出的。

从概念上讲,我知道如果 STS 使用它的私钥加密(或签名)令牌,我可以使用公钥解密(或验证签名)。

据我了解,我使用的 STS(ThinkTecture 身份服务器)使用对称签名密钥来签署令牌。

我收到的 SessionSecurityToken 包含一个 SecurityKeys 属性。什么代表这个 SecurityKeys? MSDN 文档告诉:“获取与此会话关联的密钥。这通常是单个密钥。”

是我的 STS 使用的 SymmetricKey 吗?如果是这样,说明对称密钥没有得到很好的保护,如果有人拿到了这个密钥,他就可以伪造一个令牌。

是令牌签名吗?如果是这样,我该如何验证签名(假设我有对称密钥)?

还有任何其他有用的信息可以帮助我理解我们验证 SessionSecurityToken 的方式吗?

【问题讨论】:

    标签: token wif federated-identity thinktecture-ident-server


    【解决方案1】:

    首先 - STS 不会发出会话令牌。他们发出(我猜你使用 WS-Fed)一个 SAML 令牌。此令牌使用 X.509 证书进行签名。

    然后,依赖方获取传入的 SAML 令牌并将其转换为会话令牌并将其写入 cookie。

    那你为什么要验证呢?这是由 SAM 自动完成的。

    【讨论】:

    • 是的,我正在使用 WS-Fed。我有一个特殊的三层架构: 1- JavaScript WebApp 2- WebAPI 3- WCF(核心逻辑) Wcf 层是我所有逻辑的内部(未公开)。 WebAPI 层只是将我的 wcf 核心模块的所有功能暴露给 Web RestAPI 的一种方式。这一层没有逻辑或验证。我的 JavaScript 应用程序已插入 WebAPI。我想要的是在 STS 上重定向我的 JavaScript 应用程序,并将“令牌”(我认为是 SessionSecuriytToken)推送到 WebAPI,该 WebAPI 将其推送到所有验证发生的 WCF。
    • 现在,我在所有请求中使用 WCF 标头将 SessionSecurityToken 从 WebAPI 推送到 WCF,因此 WCF 层能够对 SessionSecurityToken 内的 Principal 中包含的声明进行所有验证.但为了能够将其推送到 WCF 层,我使用 FederatedAuthentication.SessionAuthenticationModule.ContextSessionSecurityToken 从 WebAPI 层获取 SessionSecuritytoken。
    • 但是从你所说的看来,在我的WCf层进行验证似乎为时已晚,它应该发生在我的WebAPP中,这完全打破了所有架构的工作方式。
    • 您不应发送会话安全令牌。这不是他们的目的。您可能需要修改您的方法。
    • 完全!我看到解决问题的唯一方法是修改 STS 以插入包含所有包含声明的签名的特殊声明。这样,在我的 WCF 层中,我可以获得该特殊声明并使用预共享密钥计算所有其他声明的签名。这可以证明所有声明的有效性,但是,实现这一点将是一种完全丑陋和骇人听闻的方式。
    猜你喜欢
    • 2015-04-01
    • 1970-01-01
    • 2017-10-08
    • 2019-09-15
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    • 2010-11-05
    • 2013-09-12
    相关资源
    最近更新 更多