【问题标题】:How to get SAML Response and SAML Token in Controller Action method如何在控制器操作方法中获取 SAML 响应和 SAML 令牌
【发布时间】:2019-04-24 06:52:19
【问题描述】:

我正在使用 SUstainsys.SAaml2 库在 CALLback url 中使用此代码:

 public ActionResult Callback()
    {

        var samlToken = (Saml2SecurityToken)null;
        var samlResponses =  HttpContext.Request.Form["SAMLResponse"];  HttpContext.Current.Request.Form["SAMLResponse"]; or elsewhere.
        //if (form.Count() > 0)
        //{
        //    var samlResponses = form.GetValues("SAMLResponse");
            if (samlResponses != null)
            {
                foreach (var samlResponse in samlResponses)
                {
                    try
                    {
                        var decodedSamlResponse = Convert.FromBase64String(samlResponse.ToString());
                        var reader = XmlReader.Create(new MemoryStream(decodedSamlResponse));
                        var serializer = new XmlSerializer(typeof(XmlElement));
                        var samlResponseElement = (XmlElement)serializer.Deserialize(reader);
                        var manager = new XmlNamespaceManager(samlResponseElement.OwnerDocument.NameTable);
                        manager.AddNamespace("saml2", "urn:oasis:names:tc:SAML:2.0:assertion");
                        var assertion = (XmlElement)samlResponseElement.SelectSingleNode("//saml2:Assertion", manager);
                    //var samltoken= Options.FromConfiguration.SPOptions.Saml2PSecurityTokenHandler.ReadToken(XmlReader.Create(new StringReader(assertion.OuterXml)));
                    samlToken = (Saml2SecurityToken)Options.FromConfiguration.SPOptions.Saml2PSecurityTokenHandler.ReadToken(XmlReader.Create(new StringReader(assertion.OuterXml)));
                        break;
                    }
                    catch { }
                }
            }
        ViewBag.SamlResponse = samlResponses;
        ViewBag.SamlToken = samlToken;
        return View();
    }

       

但我在 SAML 响应中得到空值。

【问题讨论】:

    标签: sustainsys-saml2


    【解决方案1】:

    AcsCommand 内置了该功能,您不应该自己做。

    查看 repo 中的示例并使用 HttpModule、Mvc 控制器或 Owin 中间件(取决于您拥有的应用程序类型)。

    【讨论】:

    • 嗨亚伯,实际问题是:
    • 我是 SAML 的新手。要求是在控制器操作方法中从 SAML 响应中获取 SAML 令牌并将该令牌传递给 ImanageClient。您能帮我解决一下如何从 C# 中的 SAML 响应中获取 SAML 令牌。上面的代码不起作用,因为我没有在 request.form 中得到响应。相反,我可以在 chrome 扩展工具中检查 SAMl 响应。请帮助!!
    • @HitanshuSharma 你有想过这个吗?我正在尝试做同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2017-07-27
    • 2018-06-17
    相关资源
    最近更新 更多