bmm*_*m6o 3 windows authentication web-applications
我有一个C#Web应用程序(在某些配置中)允许用户输入Windows凭据,然后用于对远程服务进行身份验证.为实现此目的,我们当前调用LogonUser并使用生成的令牌创建WindowsIdentity,然后我们将其模拟.它一直很好,没有真正的问题.
最近我正在阅读有关Web身份验证的内容,并阅读了基本身份验证,IIS使用LsaLogonUser创建模拟上下文.我有点理解这两者之间的区别,听起来我们应该使用LsaLogonUser,但是我讨厌做出一些我不理解的改变.另一方面,在IIS上工作的人比我更了解Windows API.
那么:哪种功能更适合Web应用程序?你会说使用LogonUser是错误的,为什么?是否有情况(网络配置,用户权限等),哪一个会工作,另一个不会?使用LogonUser是否存在任何安全风险?
你的问题有很多问题,这里有一个快速回答所有问题,然后是一些细节.
LogonUser.以下是包含示例代码的Microsoft知识库文章.LogonUser,没有任何问题.这是您应该在大多数时间使用的功能.LogonUser不支持Kerberos Services 4用户(S4U),但LsaLogonUser确实如此.在更历史的注释中,LogonUser曾经需要TCB特权,但不再需要(护照登录除外).无论如何都有一个聪明的方法(寻找"该页面中SSPI的另一种用途)".现在回答2,3和4的一些细节
可以使用LogonUser
如果它支持您的用例,您应该使用LogonUser而不是LsaLogonUser.大部分时间都是这样,所以你使用LogonUser.LsaLogonUser有效,但它有很多参数,有些是指向内存的指针,必须采用特定的格式.换句话说,LsaLogonUser是由C开发人员在打包结构和自我相对指针时制作的......我不知道.酷?
LsaLogonUser可以为您提供没有密码的令牌(S4U)
在Windows Server 2003中引入了Kerberos Services for User(S4U).S4U允许您呼叫KDC并为用户获取令牌,而无需提供密码.该令牌是Identify令牌,不能用于模拟用户.LogonUser无法为您提供该令牌,但LsaLogonUser可以.
Keith Brown解释了什么是S4U以及如何更好地使用它.
结论
只有一个用例是LsaLogonUser优于LogonUser.但是由于WindowsIdentity为它提供了一个构造函数(S4U),我不明白为什么人们会在.Net应用程序中使用LsaLogonUser.
你的代码很好;)
| 归档时间: |
|
| 查看次数: |
1782 次 |
| 最近记录: |