Questo documento descrive come abilitare il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID utente finale, all'ID app o a entrambi.
Gli ID app vengono aggiunti automaticamente a un token di accesso OAuth. Pertanto, dopo aver utilizzato la procedura riportata di seguito per abilitare l'accesso ai token per un'organizzazione, puoi accedervi in base all'ID app.
Per recuperare e revocare i token di accesso OAuth 2.0 in base all'ID utente finale, nel token di accesso deve essere presente un ID utente finale. La procedura seguente descrive come aggiungere un ID utente finale a un token esistente o a nuovi token.
Per impostazione predefinita, quando Edge genera un token di accesso OAuth 2.0, il token ha il formato:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
Tieni presente quanto segue:
- Il campo
application_name
contiene l'UUID dell'app associato al token. Se attivi il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID app, questo è l'ID app che utilizzi. - Il campo
access_token
contiene il valore del token di accesso per OAuth 2.0.
Per abilitare il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID utente finale, configura il criterio OAuth 2.0 in modo da includere l'ID utente nel token, come descritto nella procedura riportata di seguito.
L'ID utente finale è la stringa che Edge utilizza come ID sviluppatore, non l'indirizzo email dello sviluppatore. Puoi determinare l'ID sviluppatore dall'indirizzo email dello sviluppatore utilizzando la chiamata API Get Developer.
Dopo aver configurato Edge in modo da includere l'ID utente finale nel token, questo viene incluso come campo app_enduser, come mostrato di seguito:
{ "issued_at" : "1421847736581", "application_name" : "a68d01f8-b15c-4be3-b800-ceae8c456f5a", "scope" : "READ", "app_enduser" : "6ZG094fgnjNf02EK", "status" : "approved", "api_product_list" : "[PremiumWeatherAPI]", "expires_in" : "3599", "developer.email" : "tesla@weathersample.com", "organization_id" : "0", "token_type" : "BearerToken", "client_id" : "k3nJyFJIA3p62DWOkLO6OJNi87GYXFmP", "access_token" : "7S22UqXGJDTuUADGzJzjXzXSaGJL", "organization_name" : "myorg", "refresh_token_expires_in" : "0", "refresh_count" : "0" }
API per recuperare e revocare i token di accesso OAuth 2.0 in base all'ID utente e all'ID app
Utilizza le seguenti API per accedere ai token OAuth in base all'ID utente, all'ID app o a entrambi:
- Ottenere il token di accesso OAuth 2.0 tramite ID utente finale o ID app
- Revocare il token di accesso OAuth 2.0 tramite l'ID utente finale o l'ID app
Procedura per abilitare l'accesso al token
Utilizza la procedura seguente per abilitare il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID utente finale e all'ID app.
Passaggio 1: abilita il supporto dell'accesso ai token per un'organizzazione
Devi abilitare l'accesso ai token per ogni organizzazione separatamente. Chiama l'API PUT riportata di seguito per ogni organizzazione per la quale vuoi abilitare il recupero e la revoca dei token di accesso OAuth 2.0 in base all'ID utente finale o all'ID app.
L'utente che effettua la chiamata seguente deve essere nel ruolo orgadmin o opsadmin
per l'organizzazione. Sostituisci values con i valori specifici
della tua organizzazione:
curl -H "Content-type:text/xml" -X POST \ https://management_server_IP;:8080/v1/organizations/org_name \ -d '<Organization name="org_name"> <Properties> <Property name="features.isOAuthRevokeEnabled">true</Property> <Property name="features.isOAuth2TokenSearchEnabled">true</Property> </Properties> </Organization>' \ -u USER_EMAIL:PASSWORD
Passaggio 2: imposta le autorizzazioni per il ruolo opsadmin nell'organizzazione
Solo ai ruoli orgadmin
e opsadmin
di un'organizzazione devono essere concesse le autorizzazioni per recuperare (HTTP GET) e revocare (HTTP PUT) i token OAuth 2.0 in base all'ID utente o all'ID app. Per controllare l'accesso, imposta le autorizzazioni get e put nella risorsa /oauth2 per un'organizzazione. La risorsa presenta un URL nel formato:
https://management_server_IP:8080/v1/organizations/org_name/oauth2
Il ruolo orgadmin
dovrebbe già disporre delle autorizzazioni necessarie. Per il ruolo opsadmin
per la risorsa /oauth2, le autorizzazioni dovrebbero avere il seguente aspetto:
<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>
Puoi utilizzare la chiamata Get Permission for a Single Resource API (Ottieni autorizzazione per un'API Single Resource) per vedere quali ruoli dispongono delle autorizzazioni per la risorsa /oauth2
.
In base alla risposta, puoi utilizzare le chiamate API Aggiungi autorizzazioni per la risorsa a un ruolo ed Autorizzazione di eliminazione per risorsa per apportare le modifiche necessarie alle autorizzazioni per la risorsa /oauth2.
Utilizza il seguente comando curl
per concedere al ruolo opsadmin
get
e le autorizzazioni put
per la risorsa /oauth2
. Sostituisci
values con i valori specifici della tua organizzazione:
curl -X POST -H 'Content-type:application/xml' \ http://management_server_IP:8080/v1/organizations/org_name/userroles/opsadmin/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions> <Permission>get</Permission> <Permission>put</Permission> </Permissions> </ResourcePermission>' \ -u USEREMAIL:PASSWORD
Utilizza il seguente comando curl
per revocare le autorizzazioni get
e put
per la risorsa /oauth2
da ruoli diversi da
orgadmin
e opsadmin
. Sostituisci values con i valori specifici della tua organizzazione:
curl -X DELETE -H 'Content-type:application/xml' \ http://management_server_IP:8080/v1/organizations/org_name/userroles/roles/permissions \ -d '<ResourcePermission path="/oauth2"> <Permissions></Permissions> </ResourcePermission>' \ -u USEREMAIL:PASSWORD
Passaggio 3: imposta la proprietà oauth_max_search_limit
Assicurati che la proprietà conf_keymanagement_oauth_max_search_limit
nel file /opt/apigee/customer/application/management-server.properties
sia impostata su 100:
conf_keymanagement_oauth_max_search_limit = 100
Se il file non esiste, crealo.
Questa proprietà imposta le dimensioni della pagina utilizzate per il recupero dei token. Apigee consiglia un valore pari a 100, ma puoi impostarlo come preferisci.
In una nuova installazione, la proprietà dovrebbe essere già impostata su 100. Se devi modificare il valore di questa proprietà, riavvia il server di gestione e il processore di messaggi utilizzando i comandi:
/opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
/opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
Passaggio 4: configura il criterio OAuth 2.0 che genera i token per includere l'ID utente finale
Configura il criterio OAuth 2.0 utilizzato per generare i token di accesso in modo da includere l'ID utente finale nel token. Includendo gli ID utente finale nel token di accesso, puoi recuperare e revocare i token per ID.
Per configurare il criterio in modo che includa un ID utente finale in un token di accesso, la richiesta che crea il token di accesso deve includere l'ID utente finale e devi specificare la variabile di input che contiene l'ID utente finale.
Il criterio OAuth 2.0 riportato di seguito, denominato GeneraAccessTokenClient, genera un token di accesso OAuth 2.0. Nota l'aggiunta del tag <AppEndUser>
in grassetto che specifica la variabile contenente l'ID utente finale:
<OAuthV2 async="false" continueOnError="false" enabled="true" name="GenerateAccessTokenClient"> <DisplayName>OAuth 2.0.0 1</DisplayName> <ExternalAuthorization>false</ExternalAuthorization> <Operation>GenerateAccessToken</Operation> <SupportedGrantTypes> <GrantType>client_credentials</GrantType> </SupportedGrantTypes> <GenerateResponse enabled="true"/> <GrantType>request.queryparam.grant_type</GrantType> <AppEndUser>request.header.appuserID</AppEndUser> <ExpiresIn>960000</ExpiresIn> </OAuthV2>
Puoi quindi utilizzare il seguente comando curl
per generare il token di accesso OAuth 2.0, passando l'ID utente come intestazione appuserID
:
curl -H "appuserID:6ZG094fgnjNf02EK" \ https://myorg-test.apigee.net/oauth/client_credential/accesstoken?grant_type=client_credentials \ -X POST -d 'client_id=k3nJyFJIA3p62TKIkLO6OJNXFmP&client_secret=gk5K5lIp943AY4'
In questo esempio, appuserID
viene passato come intestazione della richiesta. Puoi trasmettere le informazioni all'interno di una richiesta in molti modi. Ad esempio, in alternativa, puoi:
- Utilizza una variabile del parametro del modulo:
request.formparam.appuserID
- Utilizza una variabile di flusso che fornisce l'ID utente finale