.NET中的Kerberos验证与SPN设置
在利用Kerberos进行网络身份验证之前,用户需要为运行服务的账号以及服务注册SPN(Service Principal Name),之后在Kerberos进行身份验证时,即可利用SPN将二者相关联。SPN是使用 Kerberos 身份验证的网络上的唯一标识符,因此一个SPN只能属于一个账号。
假设账号accoutA运行了一个利用Kerberos进行身份验证的网络服务http://myservice.com:12345/health,并且我们为其注册了一个SPN名为HTTP/myservice.com,那么我们就会得到一个从accountA到HTTP/myservice.com的关联关系。当用户利用.NET向http://myservice.com:12345/health发送Http请求时,.NET会首先向Kerberos认证服务器发送相应的SPN以请求所需的token,而SPN是通过解析欲访问的URI得来的,.NET在这个过程中会忽略掉自定义的端口号,既非预留的,诸如80、443等的端口号,因此本例中的URI对应的SPN为HTTP/myservice.com。若认证服务器找到了所请求的SPN,则返回相应的token,之后会继续进行Kerberos的后续验证;若认证服务器未能找到所请问的SPN,则验证过程会自动降级为NTLM。
接上文的假设,假设账号accountB运行了一个利用Kerberos进行身份验证的网络服务http://myservice.com:12346/health。当用户利用.NET向http://myservice.com:12346/health发送Http请求时,.NET依然会利用HTTP/myservice.com向Kerberos认证服务器请求token,经查找后,认证服务器会返回一个与accountA相关联的token,因为HTTP/myservice.com是与accountA相关联的。之后当前的Http请求会使用获得的token向accountB运行的http://myservice.com:12346/health服务请求后续的Kerberos验证,但由于该token是面向accountA的,所以只有accountA运行的服务知道如何解密,所以对于accountB运行的服务而言,这是一个无效的token,因此当前的Http请求最终会得到一个401 (Unauthorized)的response。
再假设accountA运行了一个新的利用Kerberos进行身份验证的网络服务http://anotherservice.com:12345/health,但是我们不想注册一个新是SPN,我们想要继续使用已存在的SPN,既HTTP/myservice.com。默认情况下,当用户利用.NET向http://anotherservice.com:12345/health发送Http请求时,其解析获得的SPN通常为HTTP/anotherservice:12345,显然这不是我们想要的。那么此时,我们可以利用AuthenticationManager来进行手动绑定,既将如下代码添加到客服端的程序中即可:
AuthenticationManager.CustomTargetNameDictionary.Add("http://anotherservice.com:12345", "HTTP/myservice.com");
.NET中的Kerberos验证与SPN设置相关推荐
- kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述
kerberos验证 This article gives an overview of Service Principal Name (SPN) for using the Kerberos aut ...
- Kerberos验证过程
参考文献: How the Kerberos Version 5 Authentication Protocol Works: Logon and Authentication SQL Kerbero ...
- python kafka kerberos 验证 消费 生产
2019独角兽企业重金招聘Python工程师标准>>> [toc] 安装 pykafka github $ pip install pykafka$ conda install -c ...
- JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。
JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用. 今天再次设置java的环境变量,突然发现每次设置都只是按照步骤一步步将其设置完,并不了解为啥要设置,于是上网找了找 ...
- 把数据自动填入exe的输入框_2000余字长文讲解Excel中的“数据验证”,我收藏了...
今天的文章主要跟大家分享Excel中数据有效性(新的Excel版本叫:数据验证)的基础用法! 一.如何设置数据有效性? 步骤:选中需要设置数据有效性的单元格或者单元格区域,点击菜单栏的"数据 ...
- Asp.net中基于Forms验证的角色验证授权[转]
Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...
- 机器学习中的交叉验证
总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现. 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有 ...
- 【转载】Asp.Net中基于Forms验证的角色验证授权
Asp.Net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...
- 登录工程:传统 Web 应用中的身份验证技术
标题中 "传统 Web 应用" 这一说法也并没有什么官方定义,只是为了与"现代化 Web 应用"形成比较而自拟的一个概念.所谓现代化 Web 应用指的是那些基于 ...
最新文章
- 在对话框中应用CScrollView显示图像
- solaris系统的网卡配置
- oracle体系结构-内存管理
- pandas中read_csv的缺失值处理方式
- 如何设置SQL Server 全文搜索
- C++之编码问题(Unicode,ASCII,本地默认)
- 在IIS 5.1 或IIS6 中配置PHP 的FastCGI模式
- python print(len(pi_string))_Python如何从文件中读取数据
- POJ 1113 Wall 求凸包
- 永久的CheckBox(单选,全选/反选)!
- 修改tomcat浏览器地址栏图标
- mysql的启动脚本编写_老鸟带你开发专业规范的MySQL启动脚本
- 计算机桌面任务栏过宽怎么处理,任务栏变宽了怎么办 还原变宽任务栏的方法【图文教程】...
- 菠萝罐头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 高并发场景设计与解决方案
- 云数据库与传统数据库有什么区别
- illumina不愧是二代测序无冕之王
- 2022出海非洲:南非电商市场现状及发展前景
- git fatal: schannel: next InitializeSecurityContext failed: SEC E CERT EXPIRED (0x80090328)
- vue中directives的用法