Moja firma obecnie opracowuje aplikację internetową w języku Java. Kilku naszych klientów ma wewnętrzne serwery SAML (dostawcy tożsamości?) I poprosili o integrację z nimi. Ostatnio czytałem o tym i bawiłem się z OpenAM. Po około 3 dniach mam ogólne zrozumienie, ale nadal istnieją pewne luki w mojej wiedzy. Mam nadzieję, że ktoś może mi to wyjaśnić.
Oto jak wyobrażam sobie przepływ pracy podczas logowania się użytkownika.
Zdefiniujmy serwer SAML naszych klientów jako https://their.samlserver.com . Tak więc użytkownik przychodzi do naszej aplikacji internetowej w poszukiwaniu chronionego zasobu. Powiedzmy, że adres URL to http://my.app.com/something .
Więc jeśli mam rację, my.app.com jest tym, co SAML definiuje jako dostawcę usług . Nasza aplikacja zdaje sobie sprawę, że ten użytkownik musi się zalogować. Następnie przedstawiamy użytkownikowi taką stronę ...
<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
<input type="hidden" name="SAMLRequest" value="someBase64Data" />
<input type="submit" value="Submit" />
</form>
I to someBase64Data
powinna być base64
zakodowana wersja tego ...
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="identifier_1"
Version="2.0"
IssueInstant="2004-12-05T09:21:59Z"
AssertionConsumerServiceIndex="0">
<saml:Issuer>http://my.app.com</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>
Więc moje pierwsze pytania.
Jaka ma być wartość identyfikatora ?
Dlaczego mogę zadeklarować się jako wystawca ?
Czy dostawca tożsamości wie o mnie? Może to ten krąg zaufania , który widziałem na OpenAM . A jeśli wie o mnie, skąd wie o mnie i co musi wiedzieć?
Więc po przekierowaniu użytkownika do tej strony, jest przenoszony na stronę dostarczoną przez dostawcę tożsamości https://their.samlserver.com . Uwierzytelniają się na tej stronie, a IDP robi magię, aby zweryfikować uwierzytelnienie i wyszukać użytkownika. Po pomyślnym uwierzytelnieniu IDP odsyła <samlp:Response>
zdefiniowany tutaj .
Jeszcze kilka pytań.
Po pierwsze, w jaki sposób <samlp:Response>
wrócę do mojej aplikacji internetowej, abym mógł ją sprawdzić?
A czego powinienem szukać w tej odpowiedzi, aby potwierdzić, że odniosła sukces? Jak wygląda awaria?
Obecnie używamy adresu e-mail (LDAP) do identyfikowania użytkowników, więc prawdopodobnie wyciągniemy go z odpowiedzi i użyjemy w ten sam sposób, w jaki robimy to teraz. Czy jest coś jeszcze, o czym powinienem pamiętać w tej odpowiedzi?
Teraz, gdy sprawdziliśmy poprawność tej odpowiedzi, możemy przyznać użytkownikowi sesję, tak jak obecnie. Ale kiedy chcą się wylogować, czy istnieje do tego przepływ pracy? Czy muszę powiadomić IDP, że użytkownik odszedł?
I wreszcie, jest kilka tematów, które zostały poruszone w moim czytaniu i nie jestem pewien, jak pasują do tego przepływu pracy. Są to krąg zaufania , żetony i artefakty .
Dziękuję wszystkim za pomoc. W ciągu ostatnich kilku dni znalazłem wiele informacji i możliwe, że uda mi się je poskładać po dłuższej grze. Ale nie znalazłem jeszcze prostego artykułu „Oto post”. Może dlatego, że się mylę co do tego, jak to działa. Może dlatego, że nie jest to tak popularne. Ale naprawdę chciałem się upewnić, że mam przepływ pracy, więc nie przegapiłem kluczowego kroku w czymś tak ważnym, jak uwierzytelnianie użytkownika.