OpenID Connect
OpenID Connect möjliggör för användare att ge externa applikationer åtkomst till resurser i Yggio på ett säkert sätt.
Yggio stöder OpenID Connect med Authorization Code Flow, vilket kräver att din applikation har en backend.
För att använda OpenID Connect måste du skapa en RP (Relying Party) via Yggios REST API. RP är vad en applikation kallas i OpenID Connect-specifikationen. Det är viktigt att du sparar det skapade hemliga nyckeln för användning i din applikations backend. Det finns ingen möjlighet att hämta din hemliga nyckel från Yggio om du förlorar den, den enda lösningen då är att skapa en ny RP.
Ta gärna en titt på yggio service example för att se ett exempel på en fungerande implementation.
Hur man använder Yggios OpenID Connector i din applikation
Nedan följer en sekvensdiagram som visar OpenID Connect-processen, följt av en detaljerad beskrivning av stegen.
1. Samla clientId och redirectUri för den tidigare skapade RP:n, URL:en för auktoriseringsendpunkten och den omfattning (scope) du vill begära. URL:en och de stödda omfattningarna kan hittas genom att göra en begäran till auth/endpoints
. När du har samlat ovanstående, omdirigera användaren till auktoriseringsendpunkten med variablerna i frågeparametrar. Som ett alternativ kan också en tillstånd (state) parameter skickas för att motverka CSRF-attacker.
<authorizationEndpoint>?client_id=<clientId>&redirect_uri=<redirectUri>&response_type=code&scope=<scope>&state=<state>
2. Omdirigeringen kommer att flytta användaren till en inloggningssida där användaren kan ange sitt användarnamn och lösenord och logga in. Detta steg hoppas över om användaren redan är inloggad.
3. Användaren förflyttas till en sida där användaren kan välja att tillåta eller neka applikationen åtkomst till sitt konto. När användaren trycker på "Tillåt" kommer användaren att omdirigeras till redirectUri ovan, tillsammans med en genererad code och det tillstånd som användes ovan. Tillståndet bör verifieras innan koden accepteras.
<redirectUri>?code=<code>&state=<state>
4. Applikationen kan nu skicka en POST-begäran till tokenendpunkten (kan hämtas från auth/endpoints
). Denna begäran bör bestå av följande:
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
data: {
client_id: <clientId>,
client_secret: <clientSecret>,
code: <code>,
grant_type: 'authorization_code',
redirect_uri: <redirectUri>
}
Svaret bör inkludera följande värden (id_token visas endast om det begärdes som en omfattning):
{
access_token,
expires_in,
refresh_expires_in,
refresh_token,
token_type: 'bearer',
id_token,
'not-before-policy',
session_state,
scope
}
där access_token, refresh_token och id_token alla är JWTs (JSON Web Token)
- Auktoriseringsprocessen är nu klar. Token och data bör sparas så att de kan användas igen. access_token används som en auktoriseringsheader i begäranden till Yggios REST API. På följande sätt:
Authorization: Bearer <access_token>
id_token kan användas för att autentisera användaren och refresh_token används för att förnya åtkomsttoken. Se följande avsnitt.
Förnya åtkomstoken
Åtkomstoken är endast giltig i 30 dagar. För att undvika att användaren måste logga in igen kan du förnya användarens åtkomsttoken.
För att förnya åtkomstoken skickar applikationen samma begäran som den i steg 4, med undantag för att data istället innehåller följande:
{
client_id: <clientId>,
client_secret: <clientSecret>,
grant_type: 'refresh_token',
refresh_token: <refresh_token>
}