Я работаю над проектом единого входа, где я создаю запрос проверки подлинности SAML для входа в систему, и он перенаправляет меня на страницу Microsoft и выполняет проверку подлинности на Azure Active Directory, которая работает нормально, я приложил код подготовки SAML Запрос входа в систему. Теперь я должен подготовить код для выхода из системы в Azure Active Directory, может ли кто-нибудь помочь мне с подготовкой Azure URL для выхода из ACtive каталога аналогично тому, как мы это делали для входа в систему. Какие изменения необходимо внести в запрос URL. Для входа в систему в URL-адресе нам необходимо иметь SAMLRequest в качестве параметра строки запроса, для выхода из системы, как выглядит URL-адрес?
SAML Auth Request LogIN URL (saml end point is the login url which we got)
public string SSO(string samlEndpoint)
{
var queryStringSeparator = samlEndpoint.Contains("?") ? "&" : "?";
var url = samlEndpoint + queryStringSeparator + "SAMLRequest=" + HttpUtility.UrlEncode(this.GetRequestSSO(AuthRequest.AuthRequestFormat.Base64));
if (!string.IsNullOrEmpty(relayState))
{
url += "&RelayState=" + HttpUtility.UrlEncode(relayState);
}
return url;
}
public string GetRequestSSO(AuthRequestFormat format)
{
using (StringWriter sw = new StringWriter())
{
XmlWriterSettings xws = new XmlWriterSettings();
xws.OmitXmlDeclaration = true;
using (XmlWriter xw = XmlWriter.Create(sw, xws))
{
xw.WriteStartElement("samlp", "AuthnRequest", "urn:oasis:names:tc:SAML:2.0:protocol");
xw.WriteAttributeString("ID", _id);
xw.WriteAttributeString("Version", "2.0");
xw.WriteAttributeString("IssueInstant", _issue_instant);
xw.WriteAttributeString("ProtocolBinding", "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST");
xw.WriteAttributeString("AssertionConsumerServiceURL", _assertionConsumerServiceUrl);
xw.WriteStartElement("saml", "Issuer", "urn:oasis:names:tc:SAML:2.0:assertion");
xw.WriteString(_issuer);
xw.WriteEndElement();
xw.WriteStartElement("samlp", "NameIDPolicy", "urn:oasis:names:tc:SAML:2.0:protocol");
xw.WriteAttributeString("Format", "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified");
xw.WriteAttributeString("AllowCreate", "true");
xw.WriteEndElement();
xw.WriteEndElement();
}
if (format == AuthRequestFormat.Base64)
{
var memoryStream = new MemoryStream();
var writer = new StreamWriter(new DeflateStream(memoryStream, CompressionMode.Compress, true), new UTF8Encoding(false));
writer.Write(sw.ToString());
writer.Close();
string result = Convert.ToBase64String(memoryStream.GetBuffer(), 0, (int)memoryStream.Length, Base64FormattingOptions.None);
return result;
}
return null;
}
}