扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
当客户端对网络服务进行身份验证之后,kerberos v5 协议遵循以下步骤:
• |
客户端从 KDC 请求 TGT。用户试图通过提供用户凭据登录到客户端。客户端计算机上的 Kerberos 服务向密钥发行中心 (KDC) 发送一个 Kerberos 身份验证服务请求。该请求包含用户名、请求票证授予票证(ticket-granting ticket,TGT)所获取的服务信息,以及使用用户的长期密钥(即密码)加密的时间戳。 注 在 Windows 2000 Server 或 Windows Server 2003 操作系统上,域控制器充当 KDC,而 Active Directory 宿主安全帐户数据库。 |
• |
身份验证服务发送加密的 TGT 和会话密钥。KDC 为来自 Active Directory 的用户获取长期密钥(即密码),然后解密随请求一起传送的时间戳。如果该时间戳有效,则用户是真正的用户。KDC 身份验证服务创建一个登录会话密钥,并使用用户的长期密钥对该副本进行加密。然后,该身份验证服务创建一个 TGT,它包括用户信息和登录会话密钥。最后,该身份验证服务使用自己的密钥加密 TGT,并将加密的会话密钥和加密的 TGT 传递给客户端。 |
• |
客户端从 TGT 请求服务器访问。客户端使用其长期密钥(即密码)解密登录会话密钥,并在本地缓存它。此外,客户端还将加密的 TGT 存储在它的缓存中。访问网络服务时,客户端向 KDC 票证授予服务(ticket-granting service,TGS)发送一个包含信息的请求,这些信息包括用户名、使用用户登录会话密钥加密的验证者消息、TGT,以及用户想访问的服务(和服务器)名称。 |
• |
TGS 发送加密的会话密钥和票证。KDC 上的 TGS 使用自己的密钥解密 KDC 并提取登录会话密钥。它使用该登录会话密钥解密验证者消息(通常是时间戳)。如果验证者消息成功解密,TGS 从 TGT 提取用户信息,并使用用户信息创建一个用于访问该服务的服务会话密钥。它使用该用户的登录会话密钥对该服务会话密钥的一个副本进行加密,创建一个具有服务会话密钥和用户信息的服务票证,然后使用该服务的长期密钥(密码)对该服务票证进行加密。然后,TGS 将加密的服务会话密钥和服务票证添加到客户端。 |
• |
客户端发送服务票证。客户端访问服务时,向服务器发送一个请求。该请求包含验证者消息(时间戳),该消息使用服务会话密钥和服务票证进行加密。 |
• |
服务器发送加密的时间戳以进行客户端验证。服务器解密服务票证并提取服务会话密钥。通过使用服务会话密钥,服务器解密验证者消息(时间戳)并计算它。如果验证者通过测试,则服务器使用服务会话密钥对验证者(时间戳)进行加密,然后将验证者传回到客户端。客户端解密时间戳,如果该时间戳与原始时间戳相同,则该服务是真正的,客户端继续连接。 |
服务的主要名称
kerberos v5 身份验证协议之所以使用服务的主要名称 (SPN),原因如下:
• |
支持相互身份验证。 |
• |
允许一个客户端请求票证,进而允许该客户端与特定服务通讯。 |
例如,如果某个客户端需要获得一个票证,并对在侦听端口 4766 运行的计算机 (myserver) 上的特定服务 (myservice) 进行身份验证,则该客户端使用根据该信息构造的名称从 KDC 请求一个票证,如下所示:
MyService/MyServer:4766
在 Active Directory 中注册的 SPN 在该名称和运行所请求的服务的域帐户之间维护一个映射。通过使用该机制,恶意用户难以在网络上模拟服务。恶意用户必须禁用实际服务并从该网络移除实际服务器。然后,恶意用户必须向网络中添加一台同名的新计算机并公开重复的服务。由于客户端使用具有相互身份验证的 Kerberos v5 协议,因此该客户端将无法使用重复的服务,除非它可以提供配置实际服务进行运行的域帐户的密码。
iis 向 ASP.NET 传递代表经过身份验证的用户或匿名用户帐户的令牌。该令牌在一个包含在 iprincipal 对象中的 iidentity 对象中维护,iprincipal 对象进而附加到当前 Web 请求线程。可以通过 httpcontext.user 属性访问 iprincipal 和 iidentity 对象。这些对象和该属性由身份验证模块设置,这些模块作为 HTTP 模块实现并作为 ASP.NET 管道的一个标准部分进行调用,如图 3 所示。
asp.net 管道模型包含一个 httpapplication 对象、多个 HTTP 模块对象,以及一个 HTTP 处理程序对象及其相关的工厂对象。httpruntime 对象用于处理序列的开头。在整个请求生命周期中,httpcontext 对象用于传递有关请求和响应的详细信息。
有关 ASP.NET 请求生命周期的详细信息,请参阅"ASP.NET Life Cycle",网址是 http://msdn2.microsoft.com/library/ms227435(en-US,VS.80).aspx。
身份验证模块
asp.net 2.0 在计算机级别的 Web.config 文件中定义一组 HTTP 模块。其中包括大量身份验证模块,如下所示:
<httpModules> <add name="WindowsAuthentication" type="System.Web.Security.WindowsAuthenticationModule" /> <add name="FormsAuthentication" type="System.Web.Security.FormsAuthenticationModule" /> <add name="PassportAuthentication" type="System.Web.Security.PassportAuthenticationModule" /> </httpModules>
只加载一个身份验证模块,这取决于该配置文件的 authentication 元素中指定了哪种身份验证模式。该身份验证模块创建一个 iprincipal 对象并将它存储在 httpcontext.user 属性中。这是很关键的,因为其他授权模块使用该 iprincipal 对象作出授权决定。
当 IIS 中启用匿名访问且 authentication 元素的 mode 属性设置为 none 时,有一个特殊模块将默认的匿名原则添加到 httpcontext.user 属性中。因此,在进行身份验证之后,httpcontext.user 绝不是一个空引用(在 Visual Basic 中为 nothing)。
windowsauthenticationmodule
如果 Web.config 文件包含以下元素,则激活 windowsauthenticationmodule 类。
<authentication mode="Windows" />
WindowsAuthenticationModule 类负责创建 windowsprincipal 和 windowsidentity 对象来表示经过身份验证的用户,并且负责将这些对象附加到当前 Web 请求。
对于 Windows 身份验证,遵循以下步骤:
• |
WindowsAuthenticationModule 使用从 IIS 传递到 ASP.NET 的 Windows 访问令牌创建一个 windowsprincipal 对象。该令牌包装在 httpcontext 类的 workerrequest 属性中。引发 authenticaterequest 事件时,windowsauthenticationmodule 从 httpcontext 类检索该令牌并创建 windowsprincipal 对象。httpcontext.user 用该 windowsprincipal 对象进行设置,它表示所有经过身份验证的模块和 ASP.NET 页的经过身份验证的用户的安全上下文。 |
• |
WindowsAuthenticationModule 类使用 P/Invoke 调用 Win32 函数并获得该用户所属的 Windows 组的列表。这些组用于填充 windowsprincipal 角色列表。 |
• |
WindowsAuthenticationModule 类将 windowsprincipal 对象存储在 httpcontext.user 属性中。随后,授权模块用它对经过身份验证的用户授权。 注:defaultauthenticationmodule 类(也是 ASP.NET 管道的一部分)将 thread.currentprincipal 属性设置为与 httpcontext.user 属性相同的值。它在处理 authenticaterequest 事件之后进行此操作。 |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者