Gdy klient prosi serwer zasobów o uzyskanie chronionego zasobu z tokenem dostępu OAuth 2.0, w jaki sposób ten serwer sprawdza poprawność tokenu? Protokół odświeżania tokena OAuth 2.0?
Gdy klient prosi serwer zasobów o uzyskanie chronionego zasobu z tokenem dostępu OAuth 2.0, w jaki sposób ten serwer sprawdza poprawność tokenu? Protokół odświeżania tokena OAuth 2.0?
Odpowiedzi:
Aktualizacja listopad 2015: Zgodnie z Hansem Z. poniżej - jest to teraz rzeczywiście zdefiniowane jako część RFC 7662 .
Oryginalna odpowiedź: Specyfikacja OAuth 2.0 ( RFC 6749 ) nie definiuje jasno interakcji między serwerem zasobów (RS) a serwerem autoryzacji (AS) w celu weryfikacji tokenu dostępu (AT). To naprawdę zależy od formatu / strategii tokena AS - niektóre tokeny są niezależne (jak JSON Web Tokens ), podczas gdy inne mogą być podobne do plików cookie sesji, ponieważ odnoszą się tylko do informacji przechowywanych po stronie serwera w AS.
W grupie roboczej OAuth odbyła się dyskusja na temat stworzenia standardowego sposobu komunikacji RS z AS w celu walidacji AT. Moja firma (Ping Identity) ma pochodzić z jednego takiego podejścia do naszej komercyjnej OAuth AS (PingFederate): https://support.pingidentity.com/s/document-item?bundleId=pingfederate-93&topicId=lzn1564003025072.html#lzn1564003025072__section_N10578_N1002A_N10001 . Wykorzystuje do tego interakcję opartą na REST, która jest bardzo komplementarna do OAuth 2.0.
Weryfikacja tokena Google Oauth2
Żądanie:
https://www.googleapis.com/oauth2/v1/tokeninfo?access_token=1/fFBGRNJru1FQd44AzqT3Zg
Odpowiadać:
{
"audience":"8819981768.apps.googleusercontent.com",
"user_id":"123456789",
"scope":"https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email",
"expires_in":436
}
Microsoft - Oauth2 sprawdź autoryzację
Github - Oauth2 sprawdź autoryzację
Żądanie:
GET /applications/:client_id/tokens/:access_token
Odpowiadać:
{
"id": 1,
"url": "https://api.github.com/authorizations/1",
"scopes": [
"public_repo"
],
"token": "abc123",
"app": {
"url": "http://my-github-app.com",
"name": "my github app",
"client_id": "abcde12345fghij67890"
},
"note": "optional note",
"note_url": "http://optional/note/url",
"updated_at": "2011-09-06T20:39:23Z",
"created_at": "2011-09-06T17:26:27Z",
"user": {
"login": "octocat",
"id": 1,
"avatar_url": "https://github.com/images/error/octocat_happy.gif",
"gravatar_id": "somehexcode",
"url": "https://api.github.com/users/octocat"
}
}
Logowanie przez Amazon - przewodnik dla programistów (grudzień 2015 r., Strona 21)
Żądanie :
https://api.amazon.com/auth/O2/tokeninfo?access_token=Atza|IQEBLjAsAhRmHjNgHpi0U-Dme37rR6CuUpSR...
Odpowiedź:
HTTP/l.l 200 OK
Date: Fri, 3l May 20l3 23:22:l0 GMT
x-amzn-RequestId: eb5be423-ca48-lle2-84ad-5775f45l4b09
Content-Type: application/json
Content-Length: 247
{
"iss":"https://www.amazon.com",
"user_id": "amznl.account.K2LI23KL2LK2",
"aud": "amznl.oa2-client.ASFWDFBRN",
"app_id": "amznl.application.436457DFHDH",
"exp": 3597,
"iat": l3ll280970
}
Aktualizacja odpowiedzi @Scott T.: interfejs między serwerem zasobów a serwerem autoryzacji do sprawdzania poprawności tokenów został ustandaryzowany w IETF RFC 7662 w październiku 2015, patrz: https://tools.ietf.org/html/rfc7662 . Przykładowe wezwanie do weryfikacji wyglądałoby tak:
POST /introspect HTTP/1.1
Host: server.example.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer 23410913-abewfq.123483
token=2YotnFZFEjr1zCsicMWpAA
i przykładowa odpowiedź:
HTTP/1.1 200 OK
Content-Type: application/json
{
"active": true,
"client_id": "l238j323ds-23ij4",
"username": "jdoe",
"scope": "read write dolphin",
"sub": "Z5O3upPC88QrAjx00dis",
"aud": "https://protected.example.net/resource",
"iss": "https://server.example.com/",
"exp": 1419356238,
"iat": 1419350238,
"extension_field": "twenty-seven"
}
Oczywiście przyjęcie przez dostawców i produkty będzie musiało nastąpić z czasem.
scope
parametrem zapytania, którego wartość zawiera listę zakresów oddzielonych spacjami
Specyfikacja OAuth 2.0 nie definiuje części. Ale może być kilka opcji:
Gdy serwer zasobów otrzyma token w nagłówku Authz, wywołuje API walidacji / introspekcji na serwerze Authz, aby zweryfikować token. Tutaj serwer Authz może zweryfikować to przy użyciu DB Store lub weryfikując podpis i pewne atrybuty. W ramach odpowiedzi dekoduje token i przesyła rzeczywiste dane tokena wraz z pozostałym czasem wygaśnięcia.
Serwer Authz może zaszyfrować / podpisać token przy użyciu klucza prywatnego, a następnie publickey / cert może zostać przekazany serwerowi zasobów. Gdy serwer zasobów otrzymuje token, odszyfrowuje / weryfikuje podpis, aby zweryfikować token. Pobiera zawartość i przetwarza token. Następnie może zapewnić dostęp lub odrzucić.
Specyfikacje protokołu OAuth v2 wskazują:
Atrybuty tokenu dostępu i metody używane do uzyskiwania dostępu do chronionych zasobów wykraczają poza zakres tej specyfikacji i są zdefiniowane w specyfikacjach towarzyszących.
Mój serwer autoryzacji ma punkt końcowy usługi sieciowej (SOAP), który umożliwia serwerowi zasobów sprawdzenie, czy token_dostępu jest prawidłowy.