繁体   English   中英

如何在ADFS环境中通过Javascript调用Sharepoint中受外部ADFS保护的WCF服务?

[英]How to call external ADFS secured WCF Service within Sharepoint via Javascript in an ADFS environment?

以前在我们的小型Sharepoint环境中:我们对所有内容使用集成的Windows身份验证。 在某些SharePoint网站上,我们集成了一些自定义的javascript应用程序逻辑,这些逻辑调用了非SharePoint WCF服务,该服务也通过IIS中的Windows集成身份验证来保护。 由于当前Sharepoint用户的Windows身份已传递到javascript AJAX请求并传递到WCF服务,因此它才起作用。 WCF服务使用身份信息执行一些逻辑并返回了调用。

然后,我们使用ADFS 3.0设置了Sharepoint,由于Windows集成身份验证不再起作用,因此它破坏了我们的JavaScript应用程序代码。 我的问题:解决此问题的正确方法是什么? 显然,我们必须修改外部WCF服务以支持基于ADFS声明的身份验证。 我们甚至考虑过使用ActiveDirectoryFederationServices BearerAuthentication将WCF服务迁移到.NET Web api。

但是在javascript方面,如何用当前登录的用户调用该服务? 我了解到,Sharepoint会保留一个“ FedAuth” cookie,其中包含有关当前用户的信息。 我可以将该令牌用于外部Web服务吗? 任何帮助表示赞赏。

更新:由于FedAuth cookie受HttpOnly保护,因此无法在javscript中访问,因此此操作无效。 因此,我们放弃了整个构想,并创建了直接托管在Sharepoint中的代理Web服务。 看起来这很有效,但是很难看...

这是我们解决的方法:

我们查看了Sharepoint STS的源代码,尤其是在它们创建FedAuth cookie并为令牌创建签名的时候。 您可以在DLL Microsoft.Sharepoint.IdentityModel的SPSessionSecurityTokenCookieValue类中找到它。

//excerpt from the ValidateSignature method
RSACryptoServiceProvider key = (RSACryptoServiceProvider) SPSecurityTokenServiceManager.Local.LocalLoginProvider.SigningCertificate.PublicKey.Key;
CspParameters parameters = new CspParameters {
    ProviderType = 0x18,
    KeyNumber = (int) key.CspKeyContainerInfo.KeyNumber
};
if (key.CspKeyContainerInfo.MachineKeyStore)
{
    parameters.Flags = CspProviderFlags.UseMachineKeyStore;
}
using (RSACryptoServiceProvider provider2 = new RSACryptoServiceProvider(0x800, parameters))
{
    provider2.ImportCspBlob(key.ExportCspBlob(false));
    string s = this.BuildValueToSign(options);
    byte[] buffer = Convert.FromBase64String(signature);
    flag = provider2.VerifyData(this.m_EncodingScheme.GetBytes(s), this.m_SigningScheme, buffer);
}

我们在WCF服务中复制了此方法,现在可以验证FedAuth cookie的值。 当然,您需要拥有与Sharepoint用于其令牌服务的证书相同的证书(例如,通过MMC提取证书)。

现在,我们可以通过javascript调用WCF服务,传递用户当前FedAuth cookie的值,并通过验证cookie的签名来确认用户的身份。 然后,我们可以在应用程序逻辑中安全地使用cookie的UserKey / UserName值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM