← Powrót

Uwierzytelnianie

Uwierzytelnia za pomocą konta lokalnego POL-on

Obsługa uwierzytelniania typu BASIC. Token autoryzacyjny musi być zakodowany Base64 i mieć konstrukcję:

{"login": "my_login", "password": "my_passwd", "context": "inst_code"}

gdzie:

  • my_login - login użytkownika w POL-on
  • my_password - hasło użytkownika
  • inst_code - kod jednostki, w kontekscie której użytkownik chce wykonać operację

Przykładowy kod ustawiający odpowiednią wartość nagłówka HTTP:

HttpHeaders headers = new HttpHeaders();
String authorisation = "{"login": " + login + ", "password": " + passwd + ", "context": " + instCode + "}";
byte[] encodedAuthorisation = Base64.encodeBase64(authorisation.getBytes());
headers.add("Authorization", new String(encodedAuthorisation));

W przypadku wystąpienia błędu, np. niepoprawnego loginu, niepoprawnego hasła, braku odpowiedniej roli, zostanie zwrócony kod błędu oraz status HTTP 401 - Unauthorized.

Usługa /user/userPermissions umożliwia autoryzację z pominięciem kodu jednostki. W takim przypadku token autoryzacyjny musi być zakodowany Base64 i mieć konstrukcję:

{"login": "my_login", "password": "my_passwd"}

gdzie:

  • my_login - login użytkownika w POL-on
  • my_password - hasło użytkownika

Moduł Centralnego Logowania (MCL)

Użytkownicy, którzy zmienili konta lokalne POL-on w konta centralne MCL lub zupełnie nowi użytkownicy POL-on, muszą korzystać z mechanizmu uwierzytelniania opartego na tokenie dostępowym udostępnianym przez Moduł Centralnego Logowania.

W celu skorzystania z usług wymagających uwierzytelniania konieczne jest pobranie tokena dostępowego (access_token) za pomocą usługi REST udostępnianej przez MCL. Klient publiczny (aktywny) może uzyskać token dostępowy (access token) oraz refresh token tylko przy pomocy loginu i hasła użytkownika posiadającego konto w MCL.

Pobieranie tokenu dostępowego z MCL dla użytkowników Systemu POL-on

Żądanie do MCL

Mając ważne konto MCL, aplikacja klienta zgłasza się w imieniu użytkownika po token wykonując żądanie HTTP metodą POST na adres:

curl -X POST \
  https://mcl.opi.org.pl/auth/realms/OPI/protocol/openid-connect/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=polon-openId&grant_type=password&username=nazwa_użytkownika&password=hasło_użytkownika&undefined='
Element Wartość Opis
media typeContent-Type: application/x-www-form-urlencodedElement nagłówka żądania
client_idpolon-openIdIdentyfikator systemu, w którym posiada konto użytkownik i w którego imieniu pobierany jest token dostępowy (w tym przypadku polon-openId (system POL-on)
grant_typepasswordRodzaj dostępu potrzebny do uzyskania tokena dostępowego (w tym przypadku password)
username<nazwa_użytkownika>Nazwa użytkownika, w którego imieniu pobierany jest token dostępowy
password<hasło_użytkownika>Hasło użytkownika, w którego imieniu pobierany jest token dostępowy

Odpowiedź MCL

Po poprawnym wykonaniu żądania MCL zwraca odpowiedź w formacie JSON zawierającą m.in. token dostępowy, z którego można korzystać przy wywoływaniu usług REST API:

{
    "access_token": "e....A",
    "expires_in": 60,
    "refresh_expires_in": 3600,
    "refresh_token": "e....A",
    "token_type": "bearer",
    "not-before-policy": 1526046755,
    "session_state": "56...9"
}
Nazwa atrybutu Opis
access_tokenToken dostępowy, który umożliwia wykonywanie operacji na zasobach API w imieniu zalogowanego użytkownika
expires_inCzas ważności tokena dostępowego (w sekundach, na powyższym przykładzie 60 sekund)
refresh_expires_inCzas ważności tokena przedłużającego ważność uwierzytelnienia (w sekundach, na powyższym przykładzie 60 minut)
refresh_tokenToken służący do przedłużenia ważności uwierzytelnienia użytkownika
token_typeTyp tokena (w naszym przypadku: bearer)
not-before-policyData graniczna od kiedy można stosować uwierzytelnianie poprzez MCL
session_stateStan sesji, nie ma zastosowania w przypadku korzystania z MCL przez aplikacje zewnętrzne

Odświeżanie tokenu dostępowego MCL dla użytkowników Systemu POL-on

Żądanie do MCL

Mając ważne konto MCL, aplikacja klienta zgłasza się w imieniu użytkownika po token wykonując żądanie HTTP metodą POST na adres:

curl -X POST \
  https://mcl-test.opi.org.pl/auth/realms/OPI/protocol/openid-connect/token \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'client_id=polon-openId&grant_type=refresh_token&refresh_token=e..a'
Element Wartość Opis
media tyepContent-Type: application/x-www-form-urlencodedElement nagłówka żądania
client_idpolon-openIdIdentyfikator systemu, w którym posiada konto użytkownik i w którego imieniu pobierany jest token dostępowy (w tym przypadku polon-openId (system POL-on)
grant_typerefresh_tokenRodzaj dostępu potrzebny do uzyskania tokena dostępowego (w tym przypadku refresh_token)
refresh_token<refresh_token_użytkownika>Token wykorzystywany do odświeżenia tokenu dostępowego (access_token). Refresh token zwracany jest zarówna podczas pierwszego pobierania tokenu dostępowego jak również przy każdym odświeżeniu

Odpowiedź MCL

Po poprawnym wykonaniu żądania MCL zwraca odpowiedź w formacie JSON zawierającą m.in. token dostępowy oraz token do odświeżenia sesji (refresh token), z których można korzystać przy wywoływaniu usług REST API:

{
    "access_token": "e....A",
    "expires_in": 60,
    "refresh_expires_in": 3600,
    "refresh_token": "e....A",
    "token_type": "bearer",
    "not-before-policy": 1526046755,
    "session_state": "56...9"
}

Użycie tokenu dostępowego przy wywołaniu usług wymagających uwierzytelniania

curl -X GET \
  https://polon.nauka.gov.pl/opi-ws/api/students \
  -H 'Authorization: Bearer e...A \
  -H 'login-context: UW'
Element Wartość Opis
AuthorizationBearer <token_użytkownika>Element nagłówka przekazujący token dostępowy użytkownika
login-context<kod uczelni/jednostki>Element nagłówka określający kontekst użytkownika (w powyższym przykładzie Uniwersytet Warszawski - UW