Esempio - utilizzo di più politiche OAuth in un assembly del provider OAuth

Questo esempio dimostra l'utilizzo di più politiche OAuth nel flusso di assemblaggio per un provider OAuth nativo.

L'esempio si basa sull'assemblaggio predefinito generato quando si crea un provider OAuth nativo ed è personalizzato con l'aggiunta di politiche gatewayscript che utilizzano variabili di contesto OAuth per manipolare il flusso OAuth.

Ha il seguente flusso di assemblaggio:Immagine del flusso di assemblaggio del provider OAuth

Le sezioni riportate di seguito descrivono il codice sorgente OpenAPI che è alla base di ciascuna delle politiche nell'assembly. Per il codice assembly completo, scarica multiple_oauth_policies.txt.

Politica di esempio per aggiungere un ambito personalizzato

La politica add_scope è una politica gatewayscript che aggiunge un ambito personalizzato alla richiesta.

L'YAML di origine OpenAPI sottostante è il seguente:
- gatewayscript:
     version: 2.0.0
     title: add_scope
     source: |-
       // Add another custom scope to the request
       let scope = context.get("request.parameters.scope.values[0]);
       if (scope)
         context.set("oauth.processing.scope", scope + " custom");

Convalida la richiesta OAuth iniziale

La prima politica process_request è una politica oauth che elabora la richiesta iniziale e verifica che la richiesta sia valida. Il risultato dell'elaborazione viene memorizzato automaticamente nelle variabili di contesto oauth.processing per essere utilizzato, come richiesto, dalla successiva politica OAuth nel flusso di assemblaggio.

L'YAML di origine OpenAPI sottostante è il seguente:
- oauth:
    title: process_request
    version: 2.0.0
    description: >-
      This oauth policy performs all OAuth/OpenID Connect protocol steps
      that are needed for OAuth Validation by default. The inputs and
      outputs of each of the steps are driven by documented context
      variables. Add or remove the Supported OAuth Components as required.
    oauth-provider-settings-ref:
      default: custom-form
    supported-oauth-components:
      - OAuthValidateRequest

Politica di esempio per modificare l'ambito

La normativa modify_scope è una normativa gatewayscript che modifica l'ambito in base all'applicazione chiamante.

L'YAML di origine OpenAPI sottostante è il seguente:
- gatewayscript:
    version: 2.0.0
    title: modify_scope
    source: |-
      let admin_id = '1f1a2aa4-db9f-4423-b2f1-e2572b12123a';

      // Check application and modify the scope
      let app = context.get("oauth.processing.client_id");
      let scope = context.get("oauth.processing.scope");
      if (app === admin_id) {
        context.set("oauth.processing.scope", scope + " admin");
      } else {
        context.set("oauth.processing.scope", scope + " customer");
      }

Diramazione condizionata in base al percorso OAuth

La politica path_branch è una politica switch che si dirama in base ai diversi percorsi OAuth per elaborare il proprietario della risorsa.

L'YAML di origine OpenAPI sottostante è il seguente:
- switch:
    version: 2.0.0
    title: path_branch
    case:
      - condition: ($operationPath() = '/oauth2/token')
        execute:
            .
            .
            .
          definition of the user_security and other_grants policies
           .
           .
           .
      - condition: ($operationPath() = '/oauth2/authorize')
        execute:
           .
           .
           .
          definition of the user_password and implicit_authcode policies
           .
           .
           .
      - otherwise:
           .
           .
           .
          definition of the other_endpoints policy
           .
           .
           .

Elaborare il nome utente e la password e abilitare il componente del tipo di concessione

Le due seguenti politiche operano sull'endpoint token.

  • La politica user_password per il tipo di concessione della password elabora il nome utente e la password dal corpo x-www-form-urlencoded .
  • La politica other_grants è una politica oauth che consente ai componenti OAuthGenerateAccessToken, OAuthVerifyAZCode, OAuthVerifyRefreshTokene OAuthCollectMetadata di eseguire le operazioni per le credenziali client, il codice di autorizzazione, il token di aggiornamento e i tipi di concessione password.
L'YAML di origine OpenAPI sottostante è il seguente:
- user-security:
    title: user_password
    version: 2.0.0
    description: ''
    factor-id: default
    extract-identity-method: context-var
    user-context-var: request.parameters.username.values
    pass-context-var: request.parameters.password.values
    ei-stop-on-error: false
    user-auth-method: auth-url
    au-stop-on-error: false
    auth-url: 'http://httpbin.org/basic-auth/user/pass'
    user-az-method: authenticated
    az-stop-on-error: true
    auth-response-headers-pattern: (?)x-api*
    auth-response-header-credential: X-API-Authenticated-Credential
- oauth:
    title: other_grants
    version: 2.0.0
    description: >-
      This oauth policy performs all OAuth/OpenID Connect
      protocol steps that are needed for token path by default.
      The inputs and outputs of each of the steps are driven by
      documented context variables. Add or remove the Supported
      OAuth Components as required.
    oauth-provider-settings-ref:
      default: custom-form
    supported-oauth-components:
      - OAuthGenerateAccessToken
      - OAuthVerifyAZCode
      - OAuthVerifyRefreshToken
      - OAuthCollectMetadata

Eseguire i controlli di autorizzazione e abilitare i componenti del tipo di concessione

Queste due politiche seguenti operano sull'endpoint di autorizzazione.

  • La configurazione della politica user_security deriva dalle impostazioni Sicurezza utente nel provider OAuth.
  • La politica implicit_authcode è una politica oauth che consente ai componenti OAuthGenerateAZCode, OAuthGenerateAccessTokene OAuthCollectMetadata di eseguire le operazioni per i tipi di concessione del codice di autorizzazione e implicito.
L'YAML di origine OpenAPI sottostante è il seguente:

- user-security:
    title: user_security
    version: 2.0.0
    description: >-
      This user security policy performs EI(basic) and AU(auth
      url) check for oauth assembly. Change the security check
      method as required
    factor-id: default
    extract-identity-method: basic
    ei-stop-on-error: true
    user-auth-method: auth-url
    au-stop-on-error: true
    user-az-method: authenticated
    az-stop-on-error: true
    auth-response-headers-pattern: (?)x-api*
    auth-response-header-credential: X-API-Authenticated-Credential
    auth-url: 'http://httpbin.org/basic-auth/user/pass'
- oauth:
    title: implicit_authcode
    version: 2.0.0
    description: >-
      This oauth policy performs all OAuth/OpenID Connect
      protocol steps that are needed for az code path by
      default. The inputs and outputs of each of the steps are
      driven by documented context variables. Add or remove the
      Supported OAuth Components as required.
    oauth-provider-settings-ref:
      default: custom-form
    supported-oauth-components:
      - OAuthGenerateAZCode
      - OAuthGenerateAccessToken
      - OAuthCollectMetadata

Elabora tutti gli altri endpoint

La condizione otherwise rileva tutti gli altri endpoint, ad esempio l'introspezione e la revoca degli endpoint. La politica other_endpoints nella condizione otherwise è una politica oauth che abilita i componenti OAuthIntrospectTokene OAuthRevokeTokencomponents ad eseguire le operazioni di introspezione e revoca.

L'YAML di origine OpenAPI sottostante è il seguente:
- oauth:
    title: other_endpoints
    version: 2.0.0
    description: >-
      This oauth policy performs all OAuth/OpenID Connect
      protocol steps that are needed for all other paths by
      default. The inputs and outputs of each of the steps are
      driven by documented context variables. Add or remove the
      Supported OAuth Components as required.
    oauth-provider-settings-ref:
      default: custom-form
    supported-oauth-components:
      - OAuthIntrospectToken
      - OAuthRevokeToken