通过委派转发SAML - 从Web服务器POST到Web服务器

时间:2016-05-06 21:35:49

标签: asp.net saml impersonation delegation ws-federation

我有一个使用WSFederation进行用户身份验证的ASP.NET Web应用程序。我想模仿用户并通过委托从我的Web服务器向另一个Web服务器发出webrequest。另一台服务器也进行WSFederation。

最终,我只需要来自其他网络服务器的单个页面。我需要从HTTP响应标头中获得一些标头信息。示例代码如下。

我一直在遵循这些步骤,但这适用于Webserver - > WCF,而不是Webserver - >网络服务器。

https://technet.microsoft.com/en-us/library/adfs2-identity-delegation-step-by-step-guide(v=ws.10).aspx

根据那篇文章,我在web.config中得到了以下内容:

 <system.identityModel>
 <identityConfiguration saveBootstrapContext="true">

以下是我运行的一些示例代码,用于向第二个webapp发出Web请求。它是一个简单的POST,我需要从Response头读取一些数据。

        try
        {
            var claimsPrincipal = ClaimsPrincipal.Current;
            if (claimsPrincipal.Identities.First().BootstrapContext == null)
            {
                throw new Exception("No bootstrap context found");
            }
            WebRequest request = WebRequest.Create("https://destServer/sap/bc/gui/sap/its/webgui/?sap-client=555&sap-language=en");
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            request.ContentLength = data.Length;

            using (var stream = request.GetRequestStream())
            {
                stream.Write(data, 0, data.Length);
            }

            var response = (HttpWebResponse)request.GetResponse();
            var responseBody = new StreamReader(response.GetResponseStream()).ReadToEnd();
            var responseHeaders = "";
            for (int i = 0; i < response.Headers.Count; ++i)
            {
                responseHeaders += response.Headers.Keys[i] + ": " + response.Headers[i] + " <br/>";
            }

            ViewBag.responseHeader = responseHeaders;
            ViewBag.responseBody = responseBody;
        }
        catch (Exception e)
        {
            ViewBag.responseHeader = "FAILED";
            ViewBag.responseBody = e.Message;
        }

我不确定如何在请求中添加适当的SAML令牌。现在,这会导致对STS的重定向响应。我知道我需要与STS管理员合作才能获得正确的令牌,但假设我已经有了这个,那么如何使用这些SAML令牌发送(或获取)到另一个网站?

0 个答案:

没有答案