我正在尝试在小型Web服务器中实现Negotiate(至少是Kerberos部分)。我已经想出如何让客户端向我发送Kerberos协商授权标头。我已经弄清楚如何解码这些数据(ASN.1)。我无法弄清楚如何将其变成WindowsIdentity
。我可以从KerberosReceiverSecurityToken
大致了解我的情况,但我找不到像NegotiateReceiverSecurityToken
这样的东西。我一直在挖掘大量的DLL,我不能为我的生活找出IIS / .NET处理Negotiate标头的位置。
我假设(如果我有自己的SspiWrapper
)我会用SspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound)
做一些事情来获取一个SSPI上下文,我可以用它来调用AcceptSecurityContext/Negotiate
,然后使用QuerySecurityContextToken
获取我可以创建WindowsIdentity
的令牌。
但KerberosReceiverSecurityToken
使这看起来像一个非常复杂的过程。并且不知道如何做到这一点或授权头部有效负载的哪一部分放入其中,我可能会在没有任何地方的情况下击败它一个月。
(在你提出或回答之前,我完全没有兴趣使用内置的谈判逻辑。如果我能找到它,我会从中学习,但我一直试图让它为FAR工作很长时间我完成了。)
答案 0 :(得分:4)
Secur32.AcquireCredentialsHandle
以获取句柄Secur32.AcceptSecurityContext
传递句柄和令牌Secur32.QuerySecurityContextToken
传递安全上下文new WindowsIdentity(hToken)
如果您对上述任何步骤有任何疑问,我可以详细说明和/或提供一些示例代码。