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