Как получить ответ SAML и токен SAML в методе действия контроллера

Я использую этот код в URL-адресе обратного вызова с использованием библиотеки 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.


person Hitanshu Sharma    schedule 24.04.2019    source источник


Ответы (1)


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

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

person Anders Abel    schedule 24.04.2019
comment
Привет, Абель, Актуальная проблема: - person Hitanshu Sharma; 25.04.2019
comment
Я новичок в SAML. Требуется получить токен SAML из ответа SAML в методе действия контроллера и передать этот токен в ImanageClient. Можете ли вы помочь мне в этом, как я могу получить токен SAML из ответа SAML на C #. Приведенный выше код не работает, поскольку я не получаю ответа в request.form. Вместо этого я могу проверить ответ SAMl в инструменте расширения Chrome. Пожалуйста, помогите !! - person Hitanshu Sharma; 30.04.2019
comment
@HitanshuSharma Вы когда-нибудь в этом догадывались? Я пытаюсь сделать то же самое. - person JasonV; 08.10.2019