Ottenimento dei token

Quando gli utenti o i servizi di backend interagiscono con l'applicazione, potrebbero aver bisogno di essere autorizzati a eseguire azioni specifiche. App ID verifica che l'entità che effettua la richiesta sia autorizzata e restituisce token di accesso e identità all'applicazione. Se l'entità che effettua la richiesta è un utente finale, i token potrebbero contenere delle informazioni sull'utente, ad esempio l'ambito delle loro autorizzazioni e il loro nome. Se si tratta di un servizio di backend, viene restituito solo un token di accesso.

Acquisizione del tuo client ID e segreto con la GUI

Per ottenere i token, è necessario disporre dell'ID cliente e del segreto. Le credenziali sono specifiche per ogni applicazione e vengono utilizzate per aiutare a identificare e convalidare gli utenti a cui potrebbe essere assegnato un token.

  1. Passa alla scheda Applications del dashboard App ID.

  2. Se hai già una serie di credenziali elencate, puoi saltare al passo 3. In caso contrario, crearne uno.

    1. Sulla scheda Applications, fai clic su Add application.
    2. Fornisci alla tua applicazione un nome e fai clic su Save per ritornare a un elenco di tue applicazioni registrate. Il nome della tua applicazione non può superare i 50 caratteri.
  3. Dall'elenco delle applicazioni registrate, seleziona l'applicazione con cui vuoi lavorare. La riga si espande per mostrare le tue credenziali.

  4. Copia il tuo ID e il tuo segreto client.

Acquisizione del tuo client ID e segreto con l'API

Per ottenere i token, è necessario disporre dell'ID cliente e del segreto. Le credenziali sono specifiche per ogni applicazione e vengono utilizzate per identificare e convalidare gli utenti a cui potrebbe essere assegnato un token.

  1. Effettuare una richiesta POST all'endpoint /management/v4/<tenantID>/applications.

    Richiesta:

    curl -X POST https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Bearer <IAMToken>' \
    -d '{"name": "ApplicationName"}'
    

    Risposta di esempio:

    {
       "clientId": "c90830bf-11b0-4b65-bffe-9773f8703bad",
       "tenantId": "b42f7429-fc24-48ds-b4f9-616bcc31cfd5",
       "secret": "YWQyNjdkZjMtMGRhZC00ZWRkLThiOTQtN2E3ODEyZjhkOWQz",
       "name": "testing",
       "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/b42f7429-fc24-48ds-b4f9-616bcb31cfd5",
       "profilesUrl": "https://us-south.appid.cloud.ibm.com",
       "discoveryEndpoint": "https://us-south.appid.cloud.ibm.com/oauth/v4/b42f7429-fc24-48ds-b4f9-616bcb31cfd5/.well-known/openid-configuration"
    }
    
  2. Copia l'ID e il segreto client.

Ottenimento di token di accesso e identità con la GUI

Con un ID e un segreto del client, è possibile ottenere token di accesso e identità utilizzando l'API o un SDK. I seguenti esempi mostrano come ottenere un token utilizzando il flusso ROP (Resource Owner Password).

Questa azione può essere effettuata solo tramite l'API. Per vedere i passi, passare alle istruzioni API.

Ottenimento di token di accesso e identità con l'API

Con un ID e un segreto del client, è possibile ottenere token di accesso e identità utilizzando l'API o un SDK. I seguenti esempi mostrano come ottenere un token utilizzando il flusso ROP (Resource Owner Password).

  1. Ottieni l'ID tenant, l'ID client, il segreto e l'URL del server OAuth dalle tue credenziali.

  2. Codificare il proprio ID client e segreto utilizzando un encoder base64.

  3. Utilizzare i seguenti esempi di codice per richiamare i token. Il tipo di concessione utilizzato per ottenere il token può variare a seconda del tipo di autorizzazione con cui si lavora. Per un elenco dettagliato delle opzioni, consultare il sito documentazione swagger.

    curl -X POST 'https://<region>.appid.cloud.ibm.com/oauth/v4/<tenantID>/token' \
    -H 'Authorization: Basic base64Encoded{<clientID>:<clientSecret>}' \
    -H 'Accept: application/json' \
    -F 'grant_type=password' \
    -F 'username=testuser@test.com' \
    -F 'password=testuser'
    
    // iOS Swift example
    
    class delegate : TokenResponseDelegate {
       public func onAuthorizationSuccess(accessToken: AccessToken?, identityToken: IdentityToken?, refreshToken: RefreshToken?, response:Response?) {
       //User authenticated
       }
    
       public func onAuthorizationFailure(error: AuthorizationError) {
       //Exception occurred
       }
    }
    
    AppID.sharedInstance.signinWithResourceOwnerPassword(username: username, password: password, delegate: delegate())
    
    AppID.getInstance().signinWithResourceOwnerPassword(getApplicationContext(), username, password, new TokenResponseListener() {
       @Override
       public void onAuthorizationFailure (AuthorizationException exception) {
          //Exception occurred
       }
    
       @Override
       public void onAuthorizationSuccess (AccessToken accessToken, IdentityToken identityToken, RefreshToken refreshToken) {
          //User authenticated
       }
    });
    
    // Declare the API you want to protect
    app.get("/api/protected",
    
       passport.authenticate(APIStrategy.STRATEGY_NAME, {
       session: false
       }),
       function(req, res) {
       // Get full appIdAuthorizationContext from request object
       var appIdAuthContext = req.appIdAuthorizationContext;
    
       appIdAuthContext.accessToken; // Raw access_token
       appIdAuthContext.accessTokenPayload; // Decoded access_token JSON
       appIdAuthContext.identityToken; // Raw identity_token
       appIdAuthContext.identityTokenPayload; // Decoded identity_token JSON
       appIdAuthContext.refreshToken; // Raw refresh_token
       ...
       }
    );
    
    // Server-side swift example
    
    let options = [
       "clientId": "<clientID>",
       "secret": "<secret>",
       "tenantId": "<tenantID>",
       "oauthServerUrl": "<oauthServerURL>",
       "redirectUri": "<appURL>" + CALLBACK_URL
    ]
    let webappKituraCredentialsPlugin = WebAppKituraCredentialsPlugin(options: options)
    let kituraCredentials = Credentials()
    kituraCredentials.register(plugin: webappKituraCredentialsPlugin)