Utilizzo di token OAuth di terze parti

Questa pagina si applica a Apigee e Apigee ibridi.

Visualizza documentazione di Apigee Edge.

In questo argomento illustreremo come importare i token di accesso, i token di aggiornamento o codici di autorizzazione nell'archivio di token Apigee. Puoi usare questa tecnica se desideri configurare Apigee per convalidare i token generati al di fuori di Apigee.

Come di consueto, Apigee genererà e archivierà un token OAuth e lo restituirà al applicazione di chiamata. L'app chiamante restituisce quindi il token ad Apigee al momento della richiesta e Apigee, tramite il criterio OAuthV2 con Operazione = VerifyAccessToken, per verificare che il token sia valido. Questo argomento descrive come configurare Apigee per archiviare un token OAuth che sia stato generato altrove, pur mantenendo invariata la parte della verifica del token, proprio come se il token fosse generato da Apigee.

Esempio

Se vuoi vedere un esempio funzionante che illustra la tecnica descritti in questo argomento, dai un'occhiata al Centro risorse Apigee Esempio di gestione del token delega.

Che cos'è?

Supponiamo che tu abbia un sistema di autorizzazione esistente e che tu voglia utilizzare il metodo i valori del codice o del token generati da tale sistema al posto dei valori del codice o del token OAuth2 che le risorse generate da Apigee. Puoi quindi effettuare richieste proxy API sicure con il token o il codice sostituito, e Apigee le convaliderà come se fossero generati da Apigee.

Alcune informazioni di base

Nel solito caso, Apigee genera un token producendo una stringa casuale di lettere e numeri. Apigee associa a quel token altri dati come l'ora di emissione del token, la scadenza, l'elenco dei Prodotti API per i quali il token è valido e l'ambito. Tutto questo possono essere restituite in una risposta generata automaticamente dal criterio OAuthV2. configurato con l'operazione = GenerateAccessToken. La risposta ha questo aspetto:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "zBC90HhCGmGlaMBWeZAai2s3za5j",
  "organization_name": "myorg",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

Il valore access_token viene utilizzato da Apigee per recuperare i metadati del token. Ad esempio, supponiamo che una richiesta proxy API includa il token di connessione zBC90HhCGmGlaMBWeZAai2s3za5j. Utilizzando il valore del token, Apigee recupera i metadati del token per determinare se il token è valido.

Seguendo i passaggi descritti qui, puoi configurare Apigee per archiviare un il cui valore access_token è stato generato da un token esterno completamente gestito di Google Cloud. Ad esempio, supponiamo che tu abbia un sistema esterno ad Apigee che genera token nel formato "TOKEN-<16 numeri>" . In questo caso, i metadati completi del token archiviati da Apigee potrebbero essere:

{
  "issued_at": "1469735625687",
  "application_name": "06947a86-919e-4ca3-ac72-036723b18231",
  "scope": "urn://example.com/read",
  "status": "approved",
  "api_product_list": "[implicit-test]",
  "api_product_list_json": ["implicit-test"],
  "expires_in": "1799", //--in seconds
  "developer.email": "joe@weathersample.com",
  "token_type": "BearerToken",
  "client_id": "U9AC66e9YFyI1yqaXgUF8H6b9wUN1TLk",
  "access_token": "TOKEN-1092837373654221",
  "organization_name": "myorg",
  "refresh_token_expires_in": "0", //--in seconds
  "refresh_count": "0"
}

In questo caso, un'app potrebbe effettuare una richiesta a un proxy API, portando la portante TOKEN-1092837373654221, in modo che Apigee possa convalidarlo. Puoi applicare un pattern di importazione simile codici di autorizzazione e token di aggiornamento.

Parliamo di Validation Client Credenziali

Un prerequisito per la generazione di un token è la convalida del client richiedente. Per impostazione predefinita, Il criterio OAuthV2/GenerateAccessToken in Apigee verifica implicitamente le credenziali del client. Di solito, in una richiesta di un token OAuthV2, client_id e client_secret vengono passati nel Intestazione autorizzazione, codificata tramite autorizzazione di base HTTP (concatenata da due punti, quindi con codifica Base64). Il criterio OAuthV2/GenerateAccessToken in Apigee decodifica l'intestazione e il token cerca il client_id e verifica che la client_secret trasmessa sia valida client_id. Funziona se le credenziali sono note ad Apigee, in altre parole esiste una App sviluppatore archiviata in Apigee che contiene una credenziale, che a sua volta contiene specificati client_id e client_secret.

Nel caso in cui le credenziali client non vengano convalidate da Apigee, devi progettare il proxy API, prima che generi un token, per convalidare esplicitamente il client tramite in altri modi. Spesso mediante le norme di ServiceCallout che si connette a un endpoint remoto nella tua rete.

In un modo o nell'altro, implicitamente o esplicitamente, devi assicurarti che il proxy API che genera token convalida prima le credenziali del client. Tieni presente che la convalida indipendente dalla generazione del token di accesso. Puoi configurare Apigee per entrambe le operazioni, o di fare l'una o l'altra oppure nessuna delle due.

Se vuoi che il criterio OAuthV2/GenerateAccessToken in Apigee convalidi il client rispetto allo store Apigee, imposta l'elemento <ExternalAuthorization> su false all'interno della configurazione del criterio oppure omettilo del tutto. Se vuoi utilizzare un servizio di autorizzazione esterna per convalidare esplicitamente le credenziali client, impostare Da <ExternalAuthorization> a true.

Anche se Apigee potrebbe non convalidare le credenziali del client, è comunque necessaria per client_id in modo che sia noto e gestito da Apigee. Ogni access_token in Apigee, sia generati da Apigee o da un sistema esterno, quindi importati in Apigee, devono essere associati a un'applicazione client, come indicato dall'client_id. Quindi, anche nel caso in cui il criterio OAuthV2/GenerateAccessToken in Apigee non verificherà che client_id e client_secret corrispondono, il criterio verificherà che client_id sia valido, presente e non revocata. Quindi, come passaggio di configurazione prerequisito, potresti dover importare client_id tramite Apigee l'API amministrativa.

Flusso di criteri per OAuth di terze parti su Apigee

Per utilizzare i token di sistemi OAuth di terze parti in Apigee, il flusso per la generazione dell'accesso devono seguire uno dei seguenti pattern.

Esterni Convalida delle credenziali client

  1. ServiceCallout per verificare le credenziali del client in entrata e acquisire un token esterno.
  2. ExtractVariables o un Passaggio JavaScript per per estrarre il token generato esternamente dalla risposta.
  3. AssignMessage a imposta la variabile ben nota speciale oauth_external_authorization_status. Il valore deve essere true per indicare che le credenziali del client sono valide.
  4. OAuthV2/GenerateAccessToken con il token Elemento <ExternalAuthorization> impostato su true e almeno uno di <ExternalAccessToken>, <ExternalRefreshToken> o <ExternalAuthorizationCode>.

Interno Convalida delle credenziali client

  • ServiceCallout per acquisire un token esterno.
  • ExtractVariables o un Passaggio JavaScript per per estrarre il token generato esternamente dalla risposta.
  • OAuthV2/GenerateAccessToken con il token Elemento <ExternalAuthorization> impostato su false e almeno uno di <ExternalAccessToken>, <ExternalRefreshToken> o <ExternalAuthorizationCode>.

Note sulla configurazione di flusso e criteri

  • Se vuoi utilizzare un sistema esterno per convalidare le credenziali del client, per sviluppare un flusso di norme che faccia ciò che è necessario. Normalmente useresti criterio ServiceCallout per inviare le credenziali riconosciute esternamente all'esterno di autenticazione sicura. Il servizio di autenticazione esterna in genere restituisce una risposta e, se le credenziali sono valide, anche un token di accesso.

  • Dopo il callout Service, il proxy API deve analizzare la risposta per estrarre il valore nonché il token access_token generato esternamente ed eventualmente refresh_token.

  • Nel criterio OAuthV2/GenerateAccessToken, imposta l'elemento <StoreToken> su true e imposta l'elemento <ExternalAuthorization> su true o false a seconda dei casi.

    Quando il criterio OAuthV2/GenerateAccessToken viene eseguito, legge la variabile oauth_external_authorization_status. Se la variabile è impostata e il valore è true, Apigee non tenta di convalidare le credenziali del client. Se la variabile non è impostato o il valore non è true, Apigee tenterà di convalidare il client e credenziali.

  • Esistono tre elementi per il criterio OAuthV2 che consentono di specificare l'indirizzo dati da importare: <ExternalAccessToken>, <ExternalRefreshToken>, e <ExternalAuthorizationCode>. Ciascuno di questi elementi accetta variabile di flusso. Il criterio Apigee leggerà la variabile per trovare token di accesso, token di aggiornamento o codice di autorizzazione generati esternamente. Sta a te decidere implementare criteri e logiche per posizionare i token o i codici esterni nel come la codifica one-hot delle variabili categoriche.

    Ad esempio, la configurazione seguente nel criterio OAuthV2 indica ad Apigee di cercare il token in una variabile di contesto denominata external_token.

    <ExternalAccessToken>external_token</ExternalAccessToken>
    

    Devi inoltre specificare un passaggio precedente che imposti la variabile.

  • Per quanto riguarda l'impostazione della variabile oauth_external_authorization_status, una procedura per impostare questa variabile è utilizzare un criterioAssignMessage con l'elemento AssegnaVariabile in questo modo:

    <AssignMessage name="AssignMessage-SetVariable">
        <DisplayName>Assign Message - Set Variable</DisplayName>
        <AssignVariable>
            <Name>oauth_external_authorization_status</Name>
            <Value>true</Value>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    </AssignMessage>
    

    Ricorda che questo criterio deve precedere il criterio OAuthV2 con Operazione = GenerateAccessToken.

Esempio di criterio OAuthV2

Il seguente criterio OAuthV2 genera un token di accesso dato che Apigee trova un nella variabile di flusso external_access_token.

<OAuthV2 name="OAuth-v20-Store-External-Token">
    <DisplayName>OAuth v2.0 1</DisplayName>
    <Attributes/>
    <ExternalAccessToken>external_access_token</ExternalAccessToken>
    <ExternalAuthorization>true</ExternalAuthorization>
    <Operation>GenerateAccessToken</Operation>
    <GenerateResponse enabled="true">
        <Format>FORM_PARAM</Format>
    </GenerateResponse>
    <ReuseRefreshToken>false</ReuseRefreshToken>
    <StoreToken>true</StoreToken>
    <SupportedGrantTypes>
        <GrantType>client_credentials</GrantType>
    </SupportedGrantTypes>
    <ExpiresIn ref='flow.variable'>2400000</ExpiresIn>
</OAuthV2>

In teoria, puoi applicare questo pattern con qualsiasi autorizzazione OAuth2 di terze parti completamente gestito di Google Cloud.