我需要从Claims获取Windows令牌。解决方案是Claims Aware WCF Web服务,它使用ADFS 2.0并在IIS ASP.NET 4.0中运行。 (模拟数据库访问需要kerberos令牌)
在.NET 3.5和4.0中,c2WTS服务用于从声明中获取Windows标识:
WindowsIdentity winId = S4UClient.UpnLogon(upn);
但c2WTS的文档声明如下:“... [从.NET Framework 4.5开始,Windows Identity Foundation(WIF)已完全集成到.NET Framework中。本主题解决的WIF版本,WIF 3.5,不推荐使用,只应在针对.NET Framework 3.5 SP1或.NET Framework 4进行开发时使用...“
.NET 4.5中的c2WTS相当于什么?
答案 0 :(得分:5)
没有等价物。但你仍然可以安装WIF来获得C2WTS服务。
Saml安全令牌处理程序具有返回Windows标识的MapToWindows功能。这类似于C2WTS所做的 - 但
1)windows身份只能用于本地授权 - 假冒你需要SYSTEM权限。这就是C2WTS运行的原因。 2)委托您需要在AD中配置约束委派的令牌(就像使用C2WTS一样)
答案 1 :(得分:0)
S4U就是在这个时间点内置的。你不需要C2WTS。你可以这样做:
var id = new WindowsIdentity(valueFromClaim);
// continue your impersonation
对于服务调用,如果将凭据设置为DefaultCredentials,则应该没问题,因为这似乎在SAML令牌处理程序上执行ToWindowsIdentity。
由于您要使用Oracle,您可能需要显式创建Windows上下文并模拟(请参阅:Creating a service for user (S4U) token)。
所有这些都表示,您必须正确配置约束委派或委派不起作用。