Как получить ответ SAML и токен SAML в методе действия контроллера - PullRequest
0 голосов
/ 24 апреля 2019

Я использую этот код в URL CALLback с использованием библиотеки SUstainsys.SAaml2:

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();
    }

Но я получаю значение NULL в ответе SAML.

1 Ответ

0 голосов
/ 24 апреля 2019

Эта функциональность встроена в AcsCommand, вам не следует делать это самостоятельно.

Посмотрите примеры в репозитории и используйте промежуточное ПО HttpModule, Mvc Controller или Owin (в зависимости от типаприложение у вас есть).

...