Невозможно получить SAMLResponse из запроса.Параметры в C # из приложения onpremise, настроенного с помощью единого входа Azure SAML

#c# #asp.net-mvc #azure #azure-active-directory #saml-2.0

#c# #asp.net-mvc #azure #azure-active-directory #saml-2.0

Вопрос:

Я настроил приложение Onpremise MVC с помощью Azure App Proxy и единого входа SAML.

Когда я просматриваю ниже URL-адрес доступа пользователя к приложению onpremise, я могу перенаправить на приложение onpremise.

https://myapps.microsoft.com/signin /….

Но SAMLResponse отсутствует в запросе.Params.Keys.

Я могу получить SAMLResponse запроса в Fiddler, и когда я его декодирую, я получил все необходимые зарегистрированные утверждения, связанные с пользователем.

Но из C # я не могу получить SAMLResponse из запроса.Параметры.

Я использую приведенный ниже код для чтения утверждений.

   foreach (string s in Request.Params.Keys)
    {
        if (s.ToString() == "SAMLResponse") // SAMLResponse is missing from Request.Params.Keys, but from Fiddler, I' able to view SAMLResponse
        {
            rawSamlData = Request.Params[s];
            break;
        }
    }

    if (rawSamlData != null)
    {
        byte[] samlData = Convert.FromBase64String(rawSamlData);

        // read back into a UTF string  
        string samlAssertion = Encoding.UTF8.GetString(samlData);

        XmlDocument doc = new XmlDocument();
        XmlNamespaceManager xMan = new XmlNamespaceManager(doc.NameTable);
        xMan.AddNamespace("saml2p", "urn:oasis:names:tc:SAML:2.0:protocol");
        xMan.AddNamespace("saml2", "urn:oasis:names:tc:SAML:2.0:assertion");
        xMan.AddNamespace("ds", "http://www.w3.org/2000/09/xmldsig#");

        doc.LoadXml(Encoding.UTF8.GetString(samlData));
        XmlNode xNode = doc.SelectSingleNode("/saml2p:Response/saml2:Assertion/saml2:AttributeStatement/saml2:Attribute[@Name='http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress']", xMan);

        string NewEmailAddressCliams = null;
        foreach (XmlNode x in xNode)
        {
            NewEmailAddressCliams  = x.InnerText; // Email address returned from claim.
        }              
    }
  

Если я получу SAMLResponse в Fiddler, то я должен получить SAMLResponse и из C #, используя Request .Параметры, но этого не происходит.

Пожалуйста, помогите мне в этом.

Комментарии:

1. Привет, @Chandra, запрос. Параметры — это комбинация пар ключей / значений (коллекция), которая уже содержит вашу информацию SAML . вам нужно пройти через него, чтобы получить точные данные.

Ответ №1:

Перемещение ответа из комментариев,

Request.Params представляет собой комбинацию пар ключей / значений (коллекция), которая уже содержит вашу информацию SAML.вам нужно пройтись по нему, чтобы получить точные данные.