【发布时间】:2015-08-23 17:14:41
【问题描述】:
我正在尝试创建类似:客户端进行身份验证并从自定义 STS1 获取令牌,下一个客户端使用机器密钥授权并在自定义 STS2 上颁发令牌并获取另一个令牌。使用最后一个令牌,客户端请求 RP 服务上的方法。
所有服务都托管在 IIS 上并使用活动联合方案。 两个 STS 都有带有 ws2007Federation 和 ws2007Http 绑定的端点,RP 使用 ws2007FederationBinding 和 STS2 作为颁发者。
如果我使用 CreateChannelWithIssuedToken 创建频道,我只能看到来自 STS1 的令牌,而无法从 STS2 获取令牌。
所以我决定根据请求将 STS1 中的令牌作为 ActAs RST 的属性传递给 STS2 令牌。那失败了 - 无法解密令牌。
- 如何将这两个令牌传递给 STS2 并合并其中的声明?
- 这是一个坏主意 - 使用 RST 发送刚刚从 STS1 令牌中提取的声明?
【问题讨论】:
-
您可能需要的是,STS2 信任 STS1 进行身份验证,而您的应用信任 STS2
-
@TGlatzer 是的,两个 STS 相互信任,但接受具有不同受众 uri 的令牌。 STS1 仅使用有关用户的声明创建令牌,STS2 接受带有机器密钥的令牌,并且必须为用户+机器提供声明。 RP 服务仅信任 STS2
-
在客户端还是在 STS2 上,您究竟从哪里得到“无法解密令牌”错误消息?
-
您的场景中的 STS 是什么(例如 ADFS 2.0?)
-
@AdrianHofman“无法解密”在 STS2 上抛出,我已经意识到原因。我通过设置相同属性的作为扩展的令牌传递了令牌,但是 wstrust 不会在请求中写入带有令牌的引用,因此处理程序无法在没有引用键的情况下验证令牌(令牌是带有引用的 genericxml)。对于第二个问题 - 不,我不使用 adfs 或 acs,但我想只使用自定义服务创建类似 kerberos 逻辑的东西。两个 STS 都是自定义的,现在我从我的问题中意识到了场景 2,但仍然不喜欢这个解决方案,因为我认为它不是安全的传递参数/标题中的声明......
标签: c# wcf wif ws-security ws-federation