Windows Identity Foundation STS:其他类型的请求?

时间:2015-12-24 04:54:31

标签: certificate wif claims-based-identity windows-identity

我正在使用WIF。我开发了一款效果很好的STS。 STS本身执行登录(基本上使用Microsoft MVC附带的预卷代码)。到目前为止,我们有两个可以使用加密身份cookie的依赖方。事情就是这样:因为所有代码都在STS中,我希望STS也能执行其他功能,如注册新用户,更改密码等。所有这些预先滚动的东西。但是,在登录后,对STS中的路由的任何请求(例如,帐户/注册或甚至帐户/登录)都会失败,其中"密钥无效,无法在指定状态下使用"。我花了相当多的时间,我有两个工作的RP来复制,试图配置这个东西来解密cookie。我认为它不是配置。我想也许STS只会响应身份请求。奇怪的是,这一切都适用于IIS express(在我的笔记本电脑上)但在IIS上出现上述错误。首先想到的是证书保护。但是,如果配置错误,您甚至无法登录,因此我知道STS可以访问证书。对不起,它有点模糊,但我希望有人有好的想法或领域知识。非常感谢 -

2 个答案:

答案 0 :(得分:0)

标准STS仅涉及登录和注销。然而,正如许多人所了解的那样,有很多其他流程涉及“用户”的事情。有更改密码,丢失密码,更改电子邮件(实际上更改任何声明),刷新密码,尝试登录,注册,注册Facebook,....没有标准的方法来处理这些。 我们通过扩展可以发送到我们的STS的“行动”来解决这个问题。而不是signin1.0和signout 1.0,我们允许我们的RP直接点击总共20个动作。
您的STS应该有自己的cookie。它永远不应该与其中一个依赖方共享cookie。这样,您通常无法解密或加密密钥。

答案 1 :(得分:0)

您可以通过在每个站点的设置中以不同方式命名它们来确保wif对sts和每个rp使用单独的cookie(即stsauth,rp1auth,rp2auth) 您可以在应用程序启动时在每个站点上的ChunkedCookiedHandler对象上显式设置名称。

var chunkedCookieHandler = new ChunkedCookieHandler {
 RequireSsl = false, 
 Name = "stsauth", 
 Domain = domain, 
 PersistentSessionLifetime = new TimeSpan(0, 0, 30, 0)};

有关完整代码,请参阅here