Rozwiązanie trzecie - wprowadzamy klucz sesji
bilet=[id użytkownika, id usługi, adres sieciowy, stempel czasowy, czas
życia biletu, klucz sesji]#hasło usługi
poświadczenie=[identyfikator
użytkownika, stempel czasowy, adres sieciowy]#klucz sesji
Opis rozwiązania:
- Użytkownik wysyła serwerowi uwierzytelniającemu swój identyfikator i nazwę serwera z którego chce skorzystać.
- Serwer uwierzytelniający tworzy bilet =[identyfikator użytkownika, identyfikator usługi adres sieciowy, stempel czasowy, czas życia biletu, klucz sesji ]#hasło usługi, wraz z kluczem sesji koduje go hasłem użytkownika i wysyła użytkownikowi.
- Użytkownik znając hasło dekoduje przesyłkę i otrzymuje bilet oraz klucz sesji.
- Za każdym razem kiedy użytkownik chce potwierdzić swoją autentyczość przed serwerem generuje poświadczenie=[identyfikator użytkownika, stempel czasowy, adres sieciowy]#klucz sesji i wysyła je wraz z biletem do serwera.
- Serwer znając swoje hasło dekoduje bilet, sprawdza jego poprawności i z biletu wyciąga klucz sesji. Za pomocą klucza sesji dekoduje poświadczenie i na tej podstawie sprawdza autentyczność użytkownika.
Powyższy mechanizm łatwo można rozszerzyć tak żeby użytkownik miał możliwość
sprawdzenia autentyczności serwera ( zabezpieczenie przed atakiem wykorzystującym
fałszywy serwer ). Wystarczy że po wysłaniu serwerowi biletu i poświadczenia
użytkownik zarząda żeby serwer sam wysłał mu potwierdzenie. Jeśli serwer nie będzie prawdziwym serwerem nie
będzie potrafił wygenerować poświadczenia.