ASP.NET WIF 更改安全令牌处理程序并避免 CryptographicException
ASP.NET WIF change security token handler and avoid CryptographicException
我们有一个 ASP.NET MVC 应用程序,它使用 WIF 和经典 SessionSecurityTokenHandler
,这意味着 WIF cookie 是使用 DPAPI 签名的。
我们希望将安全令牌处理程序切换为 MachineKeySessionSecurityTokenHandler
,因为我们希望将我们的应用程序扩展到 Azure Web 应用程序部署中的多个实例(Web 场)。这意味着 WIF cookie 将使用机器密钥(在网络应用程序实例之间共享)进行签名。
我们面临的问题是用户已经为应用程序初始化了 cookie。如果我们粗暴地更改令牌处理程序,这些用户将得到一个丑陋的 HTTP 500 页面,由于 CryptographicException
因为 cookie 签名无效。
有没有办法防止错误发生,而是丢弃过时的 cookie,或者让用户重新进行身份验证?
好的,所以我们最终找到了解决此问题的方法。我们只是更改了 cookie 的名称,导致用户断开连接,并生成了一个新的 cookie。这是 web.config:
的相关部分
<configuration>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler name="CookieName" />
</federationConfiguration>
</system.identityModel.services>
</configuration>
我们有一个 ASP.NET MVC 应用程序,它使用 WIF 和经典 SessionSecurityTokenHandler
,这意味着 WIF cookie 是使用 DPAPI 签名的。
我们希望将安全令牌处理程序切换为 MachineKeySessionSecurityTokenHandler
,因为我们希望将我们的应用程序扩展到 Azure Web 应用程序部署中的多个实例(Web 场)。这意味着 WIF cookie 将使用机器密钥(在网络应用程序实例之间共享)进行签名。
我们面临的问题是用户已经为应用程序初始化了 cookie。如果我们粗暴地更改令牌处理程序,这些用户将得到一个丑陋的 HTTP 500 页面,由于 CryptographicException
因为 cookie 签名无效。
有没有办法防止错误发生,而是丢弃过时的 cookie,或者让用户重新进行身份验证?
好的,所以我们最终找到了解决此问题的方法。我们只是更改了 cookie 的名称,导致用户断开连接,并生成了一个新的 cookie。这是 web.config:
的相关部分<configuration>
<system.identityModel.services>
<federationConfiguration>
<cookieHandler name="CookieName" />
</federationConfiguration>
</system.identityModel.services>
</configuration>