在利用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设置相关推荐

  1. kerberos验证_SQL Server中的服务主体名称和Kerberos身份验证概述

    kerberos验证 This article gives an overview of Service Principal Name (SPN) for using the Kerberos aut ...

  2. Kerberos验证过程

    参考文献: How the Kerberos Version 5 Authentication Protocol Works: Logon and Authentication SQL Kerbero ...

  3. python kafka kerberos 验证 消费 生产

    2019独角兽企业重金招聘Python工程师标准>>> [toc] 安装 pykafka github $ pip install pykafka$ conda install -c ...

  4. JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用。

    JAVA坏境变量中的JAVA_HOME path classpath 的设置与作用. 今天再次设置java的环境变量,突然发现每次设置都只是按照步骤一步步将其设置完,并不了解为啥要设置,于是上网找了找 ...

  5. 把数据自动填入exe的输入框_2000余字长文讲解Excel中的“数据验证”,我收藏了...

    今天的文章主要跟大家分享Excel中数据有效性(新的Excel版本叫:数据验证)的基础用法! 一.如何设置数据有效性? 步骤:选中需要设置数据有效性的单元格或者单元格区域,点击菜单栏的"数据 ...

  6. Asp.net中基于Forms验证的角色验证授权[转]

    Asp.net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  7. 机器学习中的交叉验证

    总第100篇 本篇讲讲机器学习中的交叉验证问题,并利用sklearn实现. 前言 在说交叉验证以前,我们先想一下我们在搭建模型时的关于数据切分的常规做法[直接利用train_test_split把所有 ...

  8. 【转载】Asp.Net中基于Forms验证的角色验证授权

    Asp.Net的身份验证有有三种,分别是"Windows | Forms | Passport",其中又以Forms验证用的最多,也最灵活. Forms 验证方式对基于用户的验证授 ...

  9. 登录工程:传统 Web 应用中的身份验证技术

    标题中 "传统 Web 应用" 这一说法也并没有什么官方定义,只是为了与"现代化 Web 应用"形成比较而自拟的一个概念.所谓现代化 Web 应用指的是那些基于 ...

最新文章

  1. 在对话框中应用CScrollView显示图像
  2. solaris系统的网卡配置
  3. oracle体系结构-内存管理
  4. pandas中read_csv的缺失值处理方式
  5. 如何设置SQL Server 全文搜索
  6. C++之编码问题(Unicode,ASCII,本地默认)
  7. 在IIS 5.1 或IIS6 中配置PHP 的FastCGI模式
  8. python print(len(pi_string))_Python如何从文件中读取数据
  9. POJ 1113 Wall 求凸包
  10. 永久的CheckBox(单选,全选/反选)!
  11. 修改tomcat浏览器地址栏图标
  12. mysql的启动脚本编写_老鸟带你开发专业规范的MySQL启动脚本
  13. 计算机桌面任务栏过宽怎么处理,任务栏变宽了怎么办 还原变宽任务栏的方法【图文教程】...
  14. 菠萝罐头的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  15. 高并发场景设计与解决方案
  16. 云数据库与传统数据库有什么区别
  17. illumina不愧是二代测序无冕之王
  18. 2022出海非洲:南非电商市场现状及发展前景
  19. git fatal: schannel: next InitializeSecurityContext failed: SEC E CERT EXPIRED (0x80090328)
  20. vue中directives的用法

热门文章

  1. 网络摄像机测试用例设计思路工作随感
  2. MAC下切换到最新git版本
  3. 义嘉泰携手----炬芯蓝牙双模ATS3085 ATS3085C
  4. 《伤寒论》——辨太阳病脉证并治(中)97条
  5. 当IO和CPU遇到瓶颈时,怎么办?
  6. 分享如何用好外贸即时通讯软件
  7. cartopy绘制地图出现空白
  8. opengl es2.0 渲染文字
  9. 使用IDM下载YouLube视频
  10. NOKIA S60 V5应用设置取消虚拟键盘和禁止横屏