/ / Co to jest kodowanie używane w rozmowach SAML? - c #, kodowanie znaków, saml-2.0

Co to jest kodowanie używane w rozmowach SAML? - c #, kodowanie znaków, saml-2.0

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 № 1

Nie 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.