ASP.NET Membership 开发-微软应该是已经升级了 MachineKey 产生机制

作者:vkvi 来源:ITPOW(原创) 日期:2021-12-23

在本连载《同一域名不同应用程序冲突的情况》一文中,说到了:同一网站下的两个应用程序,如果 FormsCookieName 相同,默认情况下,它们的认证信息是互相通达的。如果我们两个应用程序是同一套账户体系,我们可以轻松实现单点登录。但是如果我们不是同一套账户体系,我们需要隔离,就需要指定不同的 FormsCookieName。

为什么会相通?

因为默认情况下 MachineKey 是自动生成的,而同一网站下的 MachineKey相同的,加上我们设置的 FormsCookieName 相同,这就能够正常地加解密了。

是不是有安全隐患?

硬要说有,那肯定也是有的,比如应用程序 A 可以去猜测应用程序 B 的 FormsCookieName,猜中了,就可以进入那边的认证体系了。甚至有时都不用猜,只要从客户端看看其 Cookie 就知道了。

更何况很多人还不会去修改这个  FormsCookieName(用默认的),修改 MachineKey 的就更少了。

微软似乎作了升级?

经过我们的跟踪发现,微软似乎对此作了升级,现在是不同应用程序MachineKey不相同,不论这些应用程序是不是同一个应用程序池。

这样,即使大家使用默认值,最多发生冲突,登录 A 时,把 B 踢下去,登录 B 时把 A 踢下去,而不会认证互通。

如果我们不要认证互通,但是防止被踢下去,怎么设置?

如上所述,默认值,可能会被别的应用程序踢下去,要防止被踢下去,就要设置 FormsCookieName。比如:

<authentication mode="Forms">
    <forms name="ItpowP1" path="/p1"></forms>
</authentication>

如果我们要认证互通,怎么设置?

1、设置相同的 FormsCookieName。

2、设置相同的 MachineKey。MachineKey 可不是随便设置的,请参见这个工具:web.config 的 MachineKey 生成器

总结

原来,默认情况下:

同一网站下,不同的应用程序使用相同的 MachineKey

需要自己指定 MachineKey,或者指定 IsolateApps,MachineKey 才会不同。

现在,默认情况下:

同一网站下,不同的应用程序使用不同的 MachineKey

只有指定相同的 MachineKey,且未标识 IsolateApps,MachineKey 才会相同。

相关文章