MachineKey 操作 之 获取 MachineKey
对MachineKey进行配置,以便将其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,并将其用于对进程外会话状态标识进行验证。本次讲的是如何获取IIS自动给应用唯一生成的MachineKey和手动生成的MachineKey,下面2种方式都适合,但是有一定区别可选择使用。
一般情况下是不允许获取MachineKey(手动生成的KEY不在此范畴,直接复制即可,本次获取的是IIS自动生成的,并且是历史项目【代码生成】,一般有由 FormsAuthentication 或者 System.Web.Security.MachineKey 等等其他相关操作类来进行获取来进行相关操作的加密,本身微软封装MachineKey时就是internal的 访问级别,不建议获取。
尝试了很多方式,APPCMD命令获取,WMI获取,等等,最后不得不编码实现,如有其他方式,请回复赐教,本次获取只能使用反射进行操作。
方式一:
private string ConvertToHex(byte[] binary)
{
return binary.Aggregate(
new StringBuilder(),
(acc, c) => acc.AppendFormat("{0:x2}", c),
acc => acc.ToString());
} string key = "", iv = "";
public void GetMachineKey()
{
System.Web.Configuration.MachineKeySection section = (System.Web.Configuration.MachineKeySection)
ConfigurationManager.GetSection("system.web/machineKey"); System.Reflection.BindingFlags flags =
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.NonPublic |
System.Reflection.BindingFlags.GetProperty; Func<string, byte[]> propertyReader = name => (byte[])section
.GetType()
.GetProperty(name, flags)
.GetValue(section, null); key = ConvertToHex(propertyReader("DecryptionKeyInternal")); iv = ConvertToHex(propertyReader("ValidationKeyInternal"));}
这种方式的缺点是,只能在第一次初始化时获取,第二次进行获取的时候,全部是00000000000000000000000000的字节数组
方式二:
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
MachineKeySection machineKeySection = (MachineKeySection)config.GetSection("system.web/machineKey"); PropertyInfo validata = ty.GetProperty("ValidationKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty);
PropertyInfo desc = ty.GetProperty("DecryptionKeyInternal", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetProperty); byte[] valiValue = (byte[])validata.GetValue(machineKeySection);
byte[] descValue = (byte[])desc.GetValue(machineKeySection); string valiStr = null;
foreach (var item in valiValue)
{
valiStr += string.Format("{0:x2}", item);
} string descStr = null;
foreach (var item in descValue)
{
descStr += string.Format("{0:x2}", item);
}
该方式唯一不同的就是,把获取配置的方式修改成了【WebConfigurationManager】来进行操作,这样任何页面和调用都可以获取到。
这样,如果有旧项目需要SSO集成分布式开发,又不希望停止服务,可以直接获取到值后进行配置修改。
MachineKey 操作 之 获取 MachineKey的更多相关文章
- Java curator操作zookeeper获取kafka
Java curator操作zookeeper获取kafka Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更 ...
- 操作dom获取datatable中的某一行的某一列的数据
需求描述:编辑的时候,点击的那一行,进入后台的验证方法,验证通过后,再进入编辑页面,进入的时候需要把本行<tr>数据中的某一列<td>的值传递过去 思路表述:之前我想的是,给列 ...
- windows的磁盘操作之七——获取当前所有的物理磁盘号 加备注
windows的磁盘操作之七--获取当前所有的物理磁盘号 2011-07-28 17:47:56 标签:windows API DeviceIoControl 物理磁盘 驱动器号 原创作品,允许转载 ...
- vue操作select获取option值
如何实时的获取你选中的值 只用@change件事 @change="changeProduct($event)" 动态传递参数 vue操作select获取option的ID值 如果 ...
- MachineKey 操作 之 应用集群中SSO应用生成MachineKey
MachineKey介绍 MachineKey其用于对 Forms 身份验证 Cookie 数据和视图状态数据进行加密和解密,一般情况下IIS自动默认给网站或者每一个应用生成唯一的MachineKey ...
- [No000091]SVN学习笔记2-TortoiseSVN Client初级操作update(获取)、commit(提交)
SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需要程序员有效的管理代码,在需要的时候可以迅速,准确取出相应的版本. Subversion是什么? ...
- 通过DOM节点操作来获取表单信息
这是之前突发奇想地用dom节点的关系来操作表单的故事.. 事情的经过是这样的,大概就是一个平台注册后有留言功能,管理员登录之后可以对这些留言进行回复.这个页面呢,就是通过foreach获取到数据库里的 ...
- 如何使用C#操作快捷方式(获取快捷方式属性、创建快捷方式)
近来项目中有需要用到一个技术:使用C#操控快捷方式,包含创建和读取等.现整理一下实现方式,分享给大家. 第一步 创建一个项目 无需废话,跳过. 第二步 引用COM组件 右键“引用”,“添加引用”, ...
- java 正则操作之获取
// 正则操作 获取import java.util.regex.*;class Demo{ public static void main(String[] args){ String str=& ...
随机推荐
- openstack资料相关
https://github.com/int32bit/openstack-workflow #openstack各种时序图 http://docs.openstack.org/developer/ ...
- php程序 注册机制
密码加密方式 1.直接md5加密 2.md5和随机数(也可以是固定参数,如(Rfd4WE784)) 3.md5(md5) 4. 参考 function sp_password($pw,$authcod ...
- 使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样
使用QQ第三方登录时,手机应用和网站应用对同一个QQ号,获取到的openid不一样openid生成是根据应用的appid和QQ号的一些信息加密生成,对于一个appid和QQ号来说,openid是唯一的 ...
- http://875880923.iteye.com/blog/1963400
已经接触了一段时间的ACM(详见百度百科)了,每回刷杭电oj的题累了的时候,就喜欢去看Ranklist里面的排名,看看前面的牛人的格言,让自己有一点憧憬.有一天突然好奇杭电上的人做的总题数的数量与人数 ...
- 小小C程序(九九乘法表)
用一个简单的嵌套循环实现: #include <stdio.h> int main() { int i,j; ,j=i;i<=&&j<=;) { if (i== ...
- JS树形菜单
超全的JS树形菜单源代码共享(有实例图) 树形菜单是很常用的效果,常用在管理软件当中,但是一套树形菜单已经不能满足需求,所以如果能有一套比较全面的树形菜单JS特效代码,将会非常方便,下面懒人萱将超全的 ...
- ngSanitize和$sce
(angular-ngSanitize模块-$sanitize服务详解) 本篇主要讲解angular中的$sanitize这个服务.此服务依赖于ngSanitize模块. 要学习这个服务,先要了解另一 ...
- maven实战(01)_搭建开发环境
一 下载maven 在maven官网上可下载maven:http://maven.apache.org/download.cgi 下载好后,解压.我的解压到了:D:\maven\apache-mave ...
- python re模块search()与match()区别
re.search()搜索字符串并返回结果. 整个字符串搜索. re.match()匹配字符串并返回结果 从开始处匹配. 所以,match()可以理解为search()的一个子集.
- 关于datepicker只显示年、月、日的设置
关键时侯,还得看官方文档.花了半个多小时,找了网上一大堆答复,然后一一验证,90%没有能解决问题. 先给出官方文档的URL: http://bootstrap-datepicker.readthedo ...