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:

  1. Użytkownik wysyła serwerowi uwierzytelniającemu swój identyfikator i nazwę serwera z którego chce skorzystać.
  2. 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.
  3. Użytkownik znając hasło dekoduje przesyłkę i otrzymuje bilet oraz klucz sesji.
  4. 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.
  5. 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.

Problemy