Konfiguruję usługę jako SAML2.0 Dostawca usług (SP). W związku z tym muszę generować żądania SAML i muszę akceptować odpowiedzi SAML. Odpowiedzi SAML (z asercjami inicjowanymi przez IDP) mogą przychodzić bez żądania. To jest po prostu świat SSO i SAML, i mam tak wiele pracy.
Moim zmysłem jest to, że Żądania lub Odpowiedzi SAML mogą, ale nie muszą być deflowane. Wydaje się, że dobrą praktyką jest SP deflacji Żądań SAML.
Żądania i odpowiedzi są również kodowane w Base 64. Ale tutaj jest moje pytanie. Powiedzmy, że otrzymałem odpowiedź SAML. Jest kodowany w Base 64. Kiedy to dekoduję, otrzymuję tablicę bajtów. Zakładając, że NIE jest to deflated, teraz muszę uzyskać ciąg z tej tablicy bajtów, aby traktować go jako XML.
Jakie kodowanie należy przyjąć dla tego ciągu?
Tak więc w świecie c # / .NET / MVC:
public ActionResult ConsumeSamlAssertion(string samlResponse)
{
if (string.IsNullOrWhiteSpace(samlResponse))
{
return Content("Consumption URL hit without a SAML Response");
}
// MVC Already gives me this URL-decoded
byte[] bytes = Convert.FromBase64String(samlResponse);
// For this question, assume that this is not deflated.
string samlXmlIfAscii = Encoding.ASCII.GetString(bytes);
string samlXmlIfUtf8 = Encoding.UTF8.GetString(bytes);
// Which is correct? Or is there a different one?
Czy to jest w jakimś standardzie, którego mi brakowało (z czego nie chce)?
Wielkie dzięki.
Odpowiedzi:
1 dla odpowiedzi № 1Nie mogę znaleźć niczego autorytatywnego w specyfikacji SAML2 na temat jakiego kodowania użyć. "Użyłem UTF8 i działa.
Odnośnie kroku deflate - to zależy odwiążący. W powiązaniu przekierowania, w którym wiadomość jest przekazywana w ciągu zapytania, jest ona deflowana. W powiązaniu POST, gdzie jest przeszłość jako pole formularza, nie jest ono deflowane.
Sugeruję również, abyś spojrzał na istniejące stosy SAML2 dla .NET zamiast toczyć własne. To dużo pracy z prawem SAML2 i łatwo uzyskać problemy z bezpieczeństwem, takie jak zawijanie podpisów XML.
0 dla odpowiedzi nr 2
Żądania SAML i odpowiedzi są w formacie XML, a to sprowadza się do pytania o kodowanie danych XML. Zobacz na przykład: Znaczenie - <? Xml version = "1.0" encoding = "utf-8"?>
Domyślne kodowanie dla XML (jeśli nie ma preambułyobecny lub nie określa kodowania) to utf-8. Dlatego możemy powiedzieć, że specyfikacja XML autorytatywnie określa, że można używać UTF-8.
Niezależnie od tego, czy wszystkie implementacje SAML, jak i sama specyfikacja SAML, pozwalają na inne kodowanie, nie jest dla mnie jasne, ale korzystanie z utf-8 powinno być bezpieczne.