Configurazione dell'autenticazione JWT

Utilizzare le seguenti informazioni per configurare l'autenticazione JWT in base alle proprie esigenze aziendali. È possibile impostare l'autenticazione JWT per vari endpoint. Ad esempio, API REST.

Prima di iniziare

Prima di iniziare la configurazione dell'autenticazione JWT, è necessario conoscere:
  • Il nome dell'emittente che sta generando e firmando il JWT con la chiave privata. Il nome emittente potrebbe essere necessario per alcune configurazioni.
  • La chiave pubblica corrispondente alla chiave privata utilizzata per firmare il JWT. Questa chiave pubblica viene utilizzata per verificare la firma di JWT.
  • I dati presenti nel JWT e il campo che può essere utilizzato per associare un utente SGO.

Procedura

  1. Abilita l'autenticazione JWT per l'endpoint appropriato.
    Se l'endpoint è l'API REST, abilitare l'autenticazione JWT impostando il valore della proprietà servlet.jwt.auth.enabled su true nel file customer_overrides.properties . Ad esempio, xapirest.servlet.jwt.auth.enabled=true.
  2. In base alla decisione di utilizzare un tipo specifico di programma di caricamento chiavi, è necessario impostare le configurazioni appropriate. Il programma di caricamento chiavi viene utilizzato per ottenere la chiave pubblica per verificare il JWT in entrata. Sterling™ Order Management System, per impostazione predefinita, fornisce i seguenti tipi di caricatori di chiavi.
    Importante: se si utilizza IBM Sterling® Order Management System on IBM CloudSaaS ), non modificare le proprietà predefinite. Utilizzare la proprietà specifica dell'emittente. Ad esempio, non modificare il programma di caricamento chiavi yfs.yfs.jwt.verify.keyloader . Invece, aggiungere un nuovo programma di caricamento chiavi specifico dell'emittente, yfs.yfs.jwt.< issuer_name>.verify.keyloader.
    Tabella 1. Programmi di caricamento chiavi forniti dall'applicazione
    Tipo di programma di caricamento chiavi Descrizione Configurazioni
    Programma di caricamento chiavi delle proprietà Legge la proprietà specifica dalle proprietà yfs per ottenere la chiave. La proprietà contiene "kid" (ID chiave) ottenuto dall'intestazione JWT. In base al bambino cerca di leggere il valore della chiave dalle proprietà. Il valore della chiave deve essere un formato PEM codificato Base64 . Le proprietà seguenti devono essere configurate nel file customer_overrides.properties per utilizzare il programma di caricamento delle chiavi delle proprietà:
    • yfs.yfs.jwt.verify.keyloader=properties

      Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader=properties

    • yfs.yfs.jwt.verify.propkeyloader.kid=base64 encoded public key
    Programma di caricamento chiave pubblica URI Https Fornisce un modo per scaricare la chiave pubblica o il certificato da un URI https al momento della verifica JWT. Se viene utilizzato un URI https, il certificato di questo URI https deve essere aggiunto alla JVM o al truststore del server delle applicazioni in modo che l'applicazione possa connettersi correttamente all'URI. Le seguenti proprietà devono essere configurate nel file customer_overrides.properties per utilizzare il programma di caricamento della chiave pubblica URI https. Per impostazione predefinita, Sterling Order Management System fornisce i seguenti programmi di caricamento chiavi URI https. È possibile utilizzare una di queste opzioni del programma di caricamento chiavi URI.
    • httpsjwks - Le seguenti proprietà devono essere configurate nel file customer_overrides.properties per utilizzare il programma di caricamento chiavi httpsjwks:
      • yfs.yfs.jwt.verify.keyloader=httpsjwks

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwks

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWKS format

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWKS format

    • httpsjwk - Le proprietà seguenti devono essere configurate nel file customer_overrides.properties per utilizzare il programma di caricamento chiavi httpsjwk:
      • yfs.yfs.jwt.verify.keyloader=httpsjwk

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwk

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWK format

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWK format

    • httpsbase64 - le seguenti proprietà devono essere configurate nel file customer_overrides.properties per utilizzare il programma di caricamento chiavi httpsbase64 :
      • yfs.yfs.jwt.verify.keyloader=httpsbase64

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader=httpsbase64

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format

        Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format

    Programma di caricamento chiavi personalizzato Fornisce un modo per caricare la chiave di verifica da un vault o da un'archiviazione personalizzata. L'implementazione personalizzata deve implementare l'interfaccia IPLTJWTVerificationKeyLoader. Questa interfaccia fornisce il metodo per restituire una chiave. Questa chiave viene utilizzata per verificare la firma di JWS. Se necessario, è possibile configurare un programma di caricamento chiavi personalizzato separato per ciascun emittente. La seguente proprietà deve essere configurata nel file customer_overrides.properties per utilizzare un programma di caricamento chiavi personalizzato:
    yfs.yfs.jwt.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    Il programma di caricamento chiavi specifico dell'emittente può essere configurato come: yfs.yfs.jwt.<issuer name>.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    Nota: se si utilizza un provider di terzi per il proprio JWT, è possibile utilizzare la configurazione httpsjwks keyloader per l'autenticazione JWT. Se il provider non supporta un endpoint JWKS (JSON Web Key Set), è possibile utilizzare le altre opzioni elencate nella tabella Tabella 1 .
  3. Identificare l'utente SGO dalle richieste di payload JWT in entrata. I dettagli dell'utente SGO possono essere forniti configurando una delle seguenti proprietà nel file customer_overrides.properties :
    • Percorso utente SGO - yfs.yfs.jwt.defclaimparser.user.path=<path relative to the JWT body JSON to read the user>

      Il percorso utente OMS specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.defclaimparser.user.path=path relative to the JWT body JSON to read the user

    • Percorso email utente SGO - yfs.yfs.jwt.defclaimparser.user.email.path=path relative to the JWT body JSON to read the user email

      Il percorso email dell'utente OMS specifico dell'emittente può essere configurato come: yfs.yfs.jwt.issuer name.defclaimparser.user.email.path=path relative to the JWT body json to read the user email

    Esempio

    Se il payload JWT ha la seguente struttura JSON:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "userid" : "testuser",
      "otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Quindi, per specificare un percorso utente, impostare la proprietà su:
    yfs.yfs.jwt.defclaimparser.user.path=userid
    Per specificare il percorso email dell'utente, impostare la proprietà su:
    yfs.yfs.jwt.defclaimparser.user.email.path=otherinfo.email

    In questo caso, il punto (.) nel percorso viene utilizzato per attraversare un oggetto child nella struttura JSON, per indicare che l'oggetto email è child dell'oggetto otherinfo.

    Nota: se i valori di <path relative to the JWT body JSON to read the user> o <path relative to the JWT body JSON to read the user email> contengono un carattere punto (.), è necessario impostare la proprietà yfs.yfs.jwt.defclaimparser.path.delim in modo da utilizzare un delimitatore diverso da punto (.). Ciò è dovuto al fatto che il punto è un carattere speciale utilizzato come delimitatore per impostazione predefinita.
    yfs.yfs.jwt.defclaimparser.path.delim=<value>

    dove value è un carattere non presente in path relative to the JWT body JSON to read the user o path relative to the JWT body JSON to read the user email.

    Quando i percorsi contengono punti (.), è possibile utilizzare la proprietà yfs.yfs.jwt.defclaimparser.path.delim per impostare un altro delimitatore per specificare il percorso.

    Ad esempio, se il payload JWT ha la seguente struttura JSON, dove il percorso utente e il percorso email utente hanno il carattere punto:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "www.foo.com/userid" : "testuser",
      "www.foo.com/otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Quindi, per modificare il delimitatore, impostare la seguente proprietà:
    yfs.yfs.jwt.defclaimparser.path.delim=$
    Poiché $ non è presente nel percorso, può essere utilizzato come delimitatore alternativo.
    Ora, il percorso utente e il percorso email utente possono essere specificati come segue:
    yfs.yfs.jwt.defclaimparser.user.path=www.foo.com/userid
    yfs.yfs.jwt.defclaimparser.user.email.path=www.foo.com/otherinfo$email

    Qui, il $ nel percorso indica che l'oggetto email è secondario dell'oggetto www.foo.com/otherinfo.