Windows Identity Foundation STS:其他类型的请求?
Windows Identity Foundation STS: other types of requests?
我正在使用 WIF。我开发了一个运行良好的 STS。 STS 本身执行登录(基本上使用 Microsoft MVC 附带的预滚动代码)。到目前为止,我们有两个可以很好地使用加密身份 cookie 的依赖方。事情是这样的:因为所有代码都在 STS 中,所以我希望 STS 还可以执行其他功能,如注册新用户、更改密码等。所有这些预先滚动的东西。但是,登录后,对 STS 中路由的任何请求(例如,account/register 甚至 account/login)都会失败并返回 "Key not valid for use in specified state"。我已经花了很多时间,而且我有两个工作 RP 可以从中复制,试图配置这个东西来解密 cookie。我的结论是它不是配置。我想也许 STS 只会响应身份请求。奇怪的是,这一切都适用于 IIS express(在我的笔记本电脑上),但在 IIS 上出现上述错误。那么首先想到的是证书保护。但是,如果配置错误,您甚至无法登录,所以我知道 STS 可以访问证书。抱歉,这有点含糊,但我希望有人有好的想法或领域知识。非常感谢-
标准STS只关心登录和退出。然而,正如许多人所知,还有许多其他流程与 "user" 相关。有更改密码、丢失密码、更改电子邮件(实际上更改任何声明)、刷新密码、尝试登录、注册、在 Facebook 注册……没有标准的方法来处理这些。
我们通过扩展可以发送到我们的 STS 的 "actions" 解决了这个问题。与 signin1.0 和 signout 1.0 不同,我们允许 RP 直接点击总共 20 个动作。
您的 STS 应该有自己的 cookie。它不应该与依赖方之一共享 cookie。这样你通常不会有解密或加密密钥的问题。
您可以通过在每个站点的设置中以不同的方式命名它们来确保 wif 为 sts 和每个 rp 使用单独的 cookie(即 stsauth、rp1auth、rp2auth)
您可以在应用程序启动时在每个站点的 ChunkedCookieHandler 对象上显式设置名称。
var chunkedCookieHandler = new ChunkedCookieHandler {
RequireSsl = false,
Name = "stsauth",
Domain = domain,
PersistentSessionLifetime = new TimeSpan(0, 0, 30, 0)};
有关执行此操作的完整代码,请参阅 here:
我正在使用 WIF。我开发了一个运行良好的 STS。 STS 本身执行登录(基本上使用 Microsoft MVC 附带的预滚动代码)。到目前为止,我们有两个可以很好地使用加密身份 cookie 的依赖方。事情是这样的:因为所有代码都在 STS 中,所以我希望 STS 还可以执行其他功能,如注册新用户、更改密码等。所有这些预先滚动的东西。但是,登录后,对 STS 中路由的任何请求(例如,account/register 甚至 account/login)都会失败并返回 "Key not valid for use in specified state"。我已经花了很多时间,而且我有两个工作 RP 可以从中复制,试图配置这个东西来解密 cookie。我的结论是它不是配置。我想也许 STS 只会响应身份请求。奇怪的是,这一切都适用于 IIS express(在我的笔记本电脑上),但在 IIS 上出现上述错误。那么首先想到的是证书保护。但是,如果配置错误,您甚至无法登录,所以我知道 STS 可以访问证书。抱歉,这有点含糊,但我希望有人有好的想法或领域知识。非常感谢-
标准STS只关心登录和退出。然而,正如许多人所知,还有许多其他流程与 "user" 相关。有更改密码、丢失密码、更改电子邮件(实际上更改任何声明)、刷新密码、尝试登录、注册、在 Facebook 注册……没有标准的方法来处理这些。
我们通过扩展可以发送到我们的 STS 的 "actions" 解决了这个问题。与 signin1.0 和 signout 1.0 不同,我们允许 RP 直接点击总共 20 个动作。
您的 STS 应该有自己的 cookie。它不应该与依赖方之一共享 cookie。这样你通常不会有解密或加密密钥的问题。
您可以通过在每个站点的设置中以不同的方式命名它们来确保 wif 为 sts 和每个 rp 使用单独的 cookie(即 stsauth、rp1auth、rp2auth) 您可以在应用程序启动时在每个站点的 ChunkedCookieHandler 对象上显式设置名称。
var chunkedCookieHandler = new ChunkedCookieHandler {
RequireSsl = false,
Name = "stsauth",
Domain = domain,
PersistentSessionLifetime = new TimeSpan(0, 0, 30, 0)};
有关执行此操作的完整代码,请参阅 here: