Configurando a autenticação JWT

Use as seguintes informações para configurar a autenticação JWT de acordo com suas necessidades de negócios. É possível configurar a autenticação do JWT para vários terminais Por exemplo, APIs REST.

Antes de iniciar

Antes de iniciar a configuração da autenticação JWT, é necessário saber:
  • O nome do emissor que está gerando e assinando o JWT com a chave privada O nome do emissor pode ser necessário para algumas configurações
  • A chave pública que corresponde à chave privada usada para assinar o JWT. Essa chave pública é usada para verificar a assinatura do JWT
  • Os dados que estão presentes no JWT e qual campo podem ser usados para mapear para um usuário do OMS

Procedimento

  1. Ativar a autenticação JWT para o terminal apropriado.
    Se o terminal for API REST, ative a autenticação JWT configurando o valor da propriedade servlet.jwt.auth.enabled como true no arquivo customer_overrides.properties . Por exemplo, xapirest.servlet.jwt.auth.enabled=true..
  2. Com base na decisão de usar um tipo específico de carregador de chaves, é necessário definir as configurações apropriadas O carregador de chaves é usado para obter a chave pública para verificar o JWT de entrada O Sterling™ Order Management System, por padrão, fornece os seguintes tipos de carregadores de chaves.
    Importante: Se você estiver usando o IBM Sterling® Order Management System on IBM CloudSaaS ), não modifique as propriedades padrão. Use a propriedade específica do emissor Por exemplo, não modifique o carregador de chaves do yfs.yfs.jwt.verify.keyloader Em vez disso, inclua um novo carregador de chaves específico do emissor, yfs.yfs.jwt.< issuer_name>.verify.keyloader
    Tabela 1. Carregadores de chaves fornecidos pelo aplicativo
    Tipo de carregador de chaves Descrição Configurações
    Carregador de chaves de propriedades Ele lê propriedades específicas de propriedades yfs para obter a chave. A propriedade contém o "kid" (ID de chave) obtido do cabeçalho JWT. Com base no garoto, ele tenta ler o valor da chave das propriedades. O valor da chave deve ser um formato PEM codificado Base64 . As seguintes propriedades precisam ser configuradas no arquivo customer_overrides.properties para usar o carregador de chaves de propriedades:
    • yfs.yfs.jwt.verify.keyloader=properties

      O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader=properties .

    • yfs.yfs.jwt.verify.propkeyloader.kid=base64 encoded public key
    Carregador de chave pública do URI https Ele fornece uma maneira de fazer download da chave pública ou do certificado de um URI https no momento da verificação do JWT. Se um URI https for usado, o certificado desse URI https deverá ser incluído no armazenamento confiável da JVM ou do servidor de aplicativos para que o aplicativo possa se conectar com êxito ao URI. As propriedades a seguir precisam ser configuradas no arquivo customer_overrides.properties para usar o carregador de chave pública do URI https Por padrão, o Sterling Order Management System fornece os seguintes carregadores de chaves https URI. É possível usar qualquer uma dessas opções do carregador de chave de URI
    • httpsjwks-As seguintes propriedades precisam ser configuradas no arquivo customer_overrides.properties para usar o carregador de chaves httpsjwks:
      • yfs.yfs.jwt.verify.keyloader=httpsjwks

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwks .

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

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWKS format .

    • httpsjwk-As seguintes propriedades precisam ser configuradas no arquivo customer_overrides.properties para usar o carregador de chaves httpsjwk:
      • yfs.yfs.jwt.verify.keyloader=httpsjwk

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwk .

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

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWK format .

    • httpsbase64 -As propriedades a seguir precisam ser configuradas no arquivo customer_overrides.properties para usar o carregador de chave httpsbase64 :
      • yfs.yfs.jwt.verify.keyloader=httpsbase64

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsbase64 .

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

        O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format .

    Carregador de chaves customizado Ele fornece uma maneira de carregar a chave de verificação de uma área segura ou de um armazenamento customizado. A implementação personalizada deve implementar a interface IPLTJWTVerificationKeyLoader. Esta interface fornece método para devolver uma chave. Essa chave é usada para verificar a assinatura do JWS Se necessário, é possível definir um carregador de chaves customizado separado para cada emissor. A seguinte propriedade precisa ser configurada no arquivo customer_overrides.properties para usar um carregador de chaves customizado:
    yfs.yfs.jwt.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    O carregador de chaves específico do emissor pode ser configurado como: yfs.yfs.jwt.<issuer name>.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface .

    Nota: se você estiver usando um provedor de terceiros para seu JWT, será possível usar a configuração httpsjwks keyloader para a autenticação JWT. Se o provedor não suportar um terminal JSON Web Key Set (JWKS), será possível usar as outras opções listadas na tabela Tabela 1 .
  3. Identifique o usuário do OMS a partir das solicitações de carga útil JWT recebidas. Os detalhes do usuário do OMS podem ser fornecidos configurando qualquer uma das propriedades a seguir no arquivo customer_overrides.properties :
    • Caminho do usuário OMS - yfs.yfs.jwt.defclaimparser.user.path=<path relative to the JWT body JSON to read the user>

      O caminho do usuário OMS específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.defclaimparser.user.path=path relative to the JWT body JSON to read the user

    • Caminho de e-mail do usuário OMS - yfs.yfs.jwt.defclaimparser.user.email.path=path relative to the JWT body JSON to read the user email

      O caminho de e-mail do usuário do OMS específico do emissor pode ser configurado como: yfs.yfs.jwt.issuer name.defclaimparser.user.email.path=path relative to the JWT body json to read the user email .

    Exemplo

    Se a carga útil do JWT tiver a estrutura JSON a seguir:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "userid" : "testuser",
      "otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Então, para especificar o caminho do usuário, configure a propriedade para:
    yfs.yfs.jwt.defclaimparser.user.path=userid
    Para especificar o caminho de e-mail do usuário, configure a propriedade para::
    yfs.yfs.jwt.defclaimparser.user.email.path=otherinfo.email

    Ou seja, aqui, o ponto (.) no caminho é usado para atravessar para um objeto filho na estrutura JSON, para denotar que o objeto email é filho do objeto otherinfo.

    Nota: Se os valores de <path relative to the JWT body JSON to read the user> ou <path relative to the JWT body JSON to read the user email> contiverem um caractere ponto (.), deve-se configurar a propriedade yfs.yfs.jwt.defclaimparser.path.delim para usar um delimitador diferente de ponto (.) Isso ocorre porque o ponto é um caractere especial usado como delimitador por padrão.
    yfs.yfs.jwt.defclaimparser.path.delim=<value>

    Em que, value é um caractere que não está presente em path relative to the JWT body JSON to read the user ou path relative to the JWT body JSON to read the user email

    Quando os caminhos contêm pontos (.), é possível usar a propriedade yfs.yfs.jwt.defclaimparser.path.delim para configurar outro delimitador para especificar o caminho.

    Por exemplo, se a carga útil do JWT tiver a estrutura JSON a seguir, em que o caminho do usuário e o caminho de e-mail do usuário têm o caractere de ponto:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "www.foo.com/userid" : "testuser",
      "www.foo.com/otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Em seguida, para alterar o delimitador, configure a seguinte propriedade:
    yfs.yfs.jwt.defclaimparser.path.delim=$
    Como $ não está presente no caminho, ele pode ser usado como um delimitador alternativo..
    Agora, o caminho do usuário e o caminho do e-mail do usuário podem ser especificados conforme a seguir::
    yfs.yfs.jwt.defclaimparser.user.path=www.foo.com/userid
    yfs.yfs.jwt.defclaimparser.user.email.path=www.foo.com/otherinfo$email

    Aqui, $ no caminho indica que o objeto email é filho do objeto www.foo.com/otherinfo.