我如何处理 .NET 中的协商?
How do I handle Negotiate in .NET?
我正在尝试在小型 Web 服务器中实施协商(至少是 Kerberos 部分)。我已经弄清楚如何让客户向我发送 Kerberos 协商授权 header。我已经弄清楚如何解码该数据 (ASN.1)。我不知道如何将其变成 WindowsIdentity
。我可以从 KerberosReceiverSecurityToken
中大致了解我的方法,但我找不到像 NegotiateReceiverSecurityToken
这样的东西。我一直在研究大量的 DLL,但我终其一生都无法弄清楚 IIS/.NET 在哪里处理协商 header。
我假设(如果我有自己的 SspiWrapper
)我会用 SspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound)
做一些事情来获取一个 SSPI 上下文,我可以用它调用 AcceptSecurityContext/Negotiate
and then use QuerySecurityContextToken
来获取令牌我可以创建一个 WindowsIdentity
.
但是 KerberosReceiverSecurityToken
使这看起来像一个极其复杂的过程。在不知道如何做或将授权 header 有效载荷的哪一部分放入其中的情况下,我可能会用一个月的时间来对抗它而一无所获。
(在你提问或回答之前,我完全没有兴趣使用内置的协商逻辑。如果我能找到它,我会从中学习,但我一直在努力让它为 FAR 工作太长了。我已经完成了。)
- 解析传入的响应令牌
- 致电
Secur32.AcquireCredentialsHandle
获取句柄
- 调用
Secur32.AcceptSecurityContext
传递句柄和令牌
- 调用
Secur32.QuerySecurityContextToken
传递安全上下文
- 使用步骤 4
的输出形式构造一个 new WindowsIdentity(hToken)
如果您对这些步骤有任何疑问,我可以详细说明and/or提供一些示例代码。
我正在尝试在小型 Web 服务器中实施协商(至少是 Kerberos 部分)。我已经弄清楚如何让客户向我发送 Kerberos 协商授权 header。我已经弄清楚如何解码该数据 (ASN.1)。我不知道如何将其变成 WindowsIdentity
。我可以从 KerberosReceiverSecurityToken
中大致了解我的方法,但我找不到像 NegotiateReceiverSecurityToken
这样的东西。我一直在研究大量的 DLL,但我终其一生都无法弄清楚 IIS/.NET 在哪里处理协商 header。
我假设(如果我有自己的 SspiWrapper
)我会用 SspiWrapper.AcquireDefaultCredential("Negotiate", CredentialUse.Inbound)
做一些事情来获取一个 SSPI 上下文,我可以用它调用 AcceptSecurityContext/Negotiate
and then use QuerySecurityContextToken
来获取令牌我可以创建一个 WindowsIdentity
.
但是 KerberosReceiverSecurityToken
使这看起来像一个极其复杂的过程。在不知道如何做或将授权 header 有效载荷的哪一部分放入其中的情况下,我可能会用一个月的时间来对抗它而一无所获。
(在你提问或回答之前,我完全没有兴趣使用内置的协商逻辑。如果我能找到它,我会从中学习,但我一直在努力让它为 FAR 工作太长了。我已经完成了。)
- 解析传入的响应令牌
- 致电
Secur32.AcquireCredentialsHandle
获取句柄 - 调用
Secur32.AcceptSecurityContext
传递句柄和令牌 - 调用
Secur32.QuerySecurityContextToken
传递安全上下文 - 使用步骤 4 的输出形式构造一个
new WindowsIdentity(hToken)
如果您对这些步骤有任何疑问,我可以详细说明and/or提供一些示例代码。