MachineKey 操作 之 应用集群中SSO应用生成MachineKey
MachineKey其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,一般情况下IIS自动默认给网站或者每一个应用生成唯一的MachineKey,当然您也可以手动生成的MachineKey,一般有由 FormsAuthentication 操作类来进行操作。
SSO:英文全称Single Sign On,单点登录,SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。
A:在虚拟主机上,不同站长的站点都在同一台机器上,默认情况,machinekey是相同的,使用FormsAuthentication就有一点风险,有时为了安全,通常可以使用自己生成随机的machineKey,这样就避免了这个问题。
B:为了负载平衡,一个站点的不同内容放到不同的机器,这样默认情况,machineKey是不同的,但是逻辑上这些都是同一站点,为了实现多个机器共用同一登入,这时就要配置相同的machineKey。
using System.Web.Configuration; //打开web.config文件,写入新生成的machineKeyConfiguration config = WebConfigurationManager.OpenWebConfiguration("/");MachineKeySection configSection = (MachineKeySection)config.GetSection("system.web/machineKey");configSection.ValidationKey = CreateKey(64);configSection.DecryptionKey = CreateKey(24);configSection.Validation = MachineKeyValidation.SHA1; if (!configSection.SectionInformation.IsLocked) {config.Save(); }
using System.Security.Cryptography; //生成随机Key public static string CreateKey(int numBytes) {RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();byte[] buff = new byte[numBytes];rng.GetBytes(buff);System.Text.StringBuilder hexString = new System.Text.StringBuilder(64);for (int i = 0; i < buff.Length; i++){hexString.Append(String.Format("{0:X2}", buff[i]));}return hexString.ToString(); }
结果web.config输出
<machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/>
具体配置请参考MSDN:地址
https://technet.microsoft.com/zh-cn/subscriptions/w8h3skw9(v=vs.80).aspx
如果你的Asp.Net程序执行时碰到这种错误:"验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法,不能在群集中使用 AutoGenerate。”那么说明你没有让你的应用程序使用统一的machineKey,那么machineKey的作用是什么呢?按照MSDN的标准说法:“对密钥进行配置,以 便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。”也就是说Asp.Net的很多加密,都是依赖于machineKey里面 的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均 衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和 ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。
转载于:https://www.cnblogs.com/NatureSex/p/4520302.html
MachineKey 操作 之 应用集群中SSO应用生成MachineKey相关推荐
- 从Hadoop集群中移除一块磁盘的操作
2019独角兽企业重金招聘Python工程师标准>>> 背景 由于历史原因,CDH的hadoop的每个DataNode节点下挂载了多个磁盘,后要对一些配置差的磁盘要用配置较好的新磁盘 ...
- 在分片集群中追踪MongoDB的操作日志
2019独角兽企业重金招聘Python工程师标准>>> 介绍 可追踪游标,特别是追踪MongoDB的操作日志是MongoDB中拥有多种用途.非常受欢迎的特色,例如向数据库发送一个有关 ...
- Tomcat5集群中的SESSION复制详解
Tomcat 5服务器为集群和SESSION复制提供了集成的支持.本系列的第一篇文章将为大家提供SESSION持久性以及TOMCAT集群中SESSION复制的 内在工作机制一个概要认识.我将会讨论SE ...
- docker swarm英文文档学习-8-在集群中部署服务
Deploy services to a swarm在集群中部署服务 集群服务使用声明式模型,这意味着你需要定义服务的所需状态,并依赖Docker来维护该状态.该状态包括以下信息(但不限于): 应该运 ...
- 《Hadoop集群与安全》一2.1 在Hadoop集群中配置操作系统
本节书摘来自华章出版社<Hadoop集群与安全>一书中的第2章,第2.1节,作者 (美)Danil Zburivsky Sudheesh Narayanan,更多章节内容可以访问云栖社区& ...
- Spark在不同集群中的运行架构
Spark注重建立良好的生态系统,它不仅支持多种外部文件存储系统,提供了多种多样的集群运行模式.部署在单台机器上时,既可以用本地(Local)模式运行,也可以使用伪分布式模式来运行:当以分布式集群部署 ...
- Apache ZooKeeper - 集群中 Observer 的作用以及 与 Follow 的区别
文章目录 Pre Observer 介绍 源码解析 INFORM 消息 Observer 处理链 小结 Pre 在 ZooKeeper 集群服务运行的过程中,Follow 服务器主要负责处理来自客户端 ...
- Apache ZooKeeper - 集群中 Follow 的作用_非事务请求的处理与 Leader 的选举分析
文章目录 Pre 非事务性请求处理过程 源码分析 选举过程 在这里插入图片描述 Leader 失效发现 Leader 重新选举 Follow 角色变更 集群同步数据 源码解析 小结 Pre 在 Zoo ...
- Apache ZooKeeper - 集群中 Leader 的作用_事务的请求处理与调度分析
文章目录 事务性请求处理 Leader 事务处理分析 预处理阶段 事务处理阶段 事务执行阶段 响应阶段 源码分析 小结 Leader 服务器在 ZooKeeper 中的作主要是处理事务性的会话请求以及 ...
最新文章
- Hello World With JBoss Modules
- Cilium 首次集成国内云服务,阿里云 ENI 被纳入新版本特性
- switch case 判断是否为按钮、设置属性 Load Foreach 绑定事件
- JZOJ 5956. 【NOIP2018模拟11.7A组】easy LCA
- 【NLP】文本分类还停留在BERT?对偶比学习框架也太强了
- 【渝粤题库】陕西师范大学800004 遥感概论
- SVD 与 PCA 的直观解释(3): SVD的直观解释及推导
- 六、Struts2的配置文件
- flask-前端-requests之response对应关系 text
- MySQL级联删除和级联修改
- swagger如何屏蔽某些接口,不对外公开--使用@ApiIgnore
- 办公神器,专治低效——特色功能软件工具
- matlab中注释多行
- 电路复习——含耦合电感的电路与变压器
- DataGridView使用技巧十二:DataGridView Error图标表示的设定
- LVS-Linux服务器集群系统(一)
- Linux安装glassfish、利用glassfish部署应用
- bugku---啊哒
- 软件过程的价值观、原则以及实践——从敏捷说起
- python操作excel 2016