首页 > 解决方案 > 如何在控制器操作方法中获取 SAML 响应和 SAML 令牌

问题描述

我在使用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

解决方案


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

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


推荐阅读