我们目前有一个在Apache上运行的公司Web应用程序。它是为通过ADFS 4.0进行SAML身份验证而设置的。通过浏览器访问应用程序时,用户的Windows凭据(Intranet区域设置)将传递到ADFS,然后尝试成功登录。
可以使用rest API访问该Web应用程序。为了执行/使用Web API,需要将X-Auth-Token标头(长64个字符)传递给它。通过浏览器,如果我转到https://webapp.com/api/v1/session/saml-login,则通过ADFS进行身份验证后,将返回JSON响应。 Web应用程序JSON响应中的第一个条目是X-Auth-Token。
我想开发将利用其余API的各种客户端应用程序。因为应用程序将在客户端执行,所以我不想传递用户名和密码,所以我想到了使用ADFS通过用户上下文对客户端应用程序进行身份验证。注意:可以通过JSON有效负载将显式的用户应用程序凭据传递给https://webapp.com/api/v1/session/login,而该请求确实会返回X-Auth-Token,并且我已经使用ac#应用程序对此进行了测试-并且它可以工作...但是如前所述,我不想使用显式凭据。
首先,我创建了另一个c#应用程序(使用https://gavindraper.com/2013/01/31/ad-fs-token-based-authentication-in-code/中的代码),该应用程序从ADFS返回以下令牌声明信息。
由于我认为我已经成功通过了ADFS的身份验证,因此无论如何我都可以通过c#或其他方式将此声明信息传递给Web应用程序服务器,这样我就可以获取X-Auth-Token并将其存储为变量这样我便可以将其传递给用于Web应用程序API身份验证的C#代码?
在同一c#应用程序实例中,如果我执行
var client = new WebClient();
var text = client.DownloadString("https://webapp.com/api/v1/session/saml-login");
Console.WriteLine(text);
Console.ReadLine();
我希望从以上代码中返回JSON响应中的X-Auth-Token。但这不是事实……相反,输出显示ADFS登录失败,因为未使用Windows凭据对ADFS进行身份验证。
无论如何,我可以通过传递ADFS声明而无需使用显式用户应用程序或Windows凭据来简单地从Web应用程序服务器获取X-Auth-Token吗?
欢呼
克雷格