关于ASP.NET应用程序多服务器部署身份验证的问题
不同的二级域名的情况下的身份验证可以通过设置Cookie的Domain属性来实现。不过由于ASP.NET中发送的身份凭证是经过加密的,而且好像一般情况下每个服务器甚至每个应用程序发送回来的都是不一样的。之前在网上好像见过好像哪篇文章好像说过这个问题的解决办法,好像需要改到machine.config的一个密钥。今天Google了一下,结果找不出来了,可能是我搜索能力太差吧。只好重回MSDN的怀抱了,找forms元素的相关的内容。结果找到了machineKey 元素,看来只需在web.config文件中设置一下就一切搞定了,方便!!!MSDN解释如下:
对密钥进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。该节可在计算机、站点和应用程序级别声明,但不在子目录级别声明。
<configuration>
<system.web>
<machineKey>
<machineKey validationKey="AutoGenerate|value[,IsolateApps]" decryptionKey="AutoGenerate|value[,IsolateApps]" validation="SHA1|MD5|3DES"/>
必选属性
属性 | 选项 | 说明 |
---|---|---|
validationKey | 指定用于验证加密数据的密钥。当 enableViewStateMAC 为 true 时,validationKey 用于创建消息身份验证代码 (MAC),以确保视图状态不会被篡改。validationKey 还可以用于生成进程外、应用程序特定的会话 ID,以确保每个会话具有独立的会话状态变量。 | |
AutoGenerate | 指定 ASP.NET 生成随机密钥并将其存储在本地安全机构 (LSA) 中。AutoGenerate 选项是默认值。如果在 validationKey 值中添加 IsolateApps 修饰符,则 ASP.NET 用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。 | |
value | 指定手动分配的验证密钥。该值必须手动设置以确保配置在整个 Web 服务器网络(网络场)上保持一致。该密钥的最小长度为 40 个字符(20 字节),最大长度为 128 个字符(64 字节)。如果所使用的密钥长度小于最大长度,则应通过真正的随机方式创建这些密钥,例如通过使用 |
|
decryptionKey | 指定用于加密数据的密钥。当 validation 为 3DES 时,decryptionKey 用于 Forms 身份验证加密和解密以及视图状态加密。 | |
AutoGenerate | 指定 ASP.NET 生成随机密钥并将其存储在 LSA 中。AutoGenerate 选项是默认值。如果在 decryptionKey 值中添加 IsolateApps 修饰符,则 ASP.NET 用每个应用程序的应用程序 ID 为每个应用程序生成一个唯一的加密密钥。 | |
value | 指定一个手动分配的密钥。该值必须手动设置为十六进制字符串,以确保配置在整个网络场中保持一致。使用 DES 加密时,密钥长度应该为 16 个字符;而使用三重 DES 加密时,密钥长度应该为 48 个字符。如果所使用的密钥长度小于最大长度,则应通过真正的随机方式创建这些密钥,例如通过使用 |
|
validation | 指定数据验证使用的加密类型。 | |
SHA1 | 指定 ASP.NET 使用 SHA1 加密。 | |
MD5 | 指定 ASP.NET 使用 MD5 加密。 | |
3DES | 指定 ASP.NET 使用三重 DES (3DES) 加密。当选择 3DES 时,Forms 身份验证默认值为 SHA1。当 validation 属性设置为 3DES 时,视图状态验证技术使用 3DES 加密方法。 |