Configuración de la autenticación JWT

Utilice la información siguiente para configurar la autenticación JWT de acuerdo con los requisitos empresariales. Puede configurar la autenticación JWT para varios puntos finales. Por ejemplo, las API REST.

Antes de empezar

Antes de empezar a configurar la autenticación JWT, debe saber:
  • El nombre del emisor que está generando y firmando el JWT con clave privada. El nombre de emisor puede ser necesario para algunas configuraciones.
  • La clave pública correspondiente a la clave privada utilizada para firmar el JWT. Esta clave pública se utiliza para verificar la firma de JWT.
  • Los datos que están presentes en el JWT y qué campo se puede utilizar para correlacionar con un usuario de OMS.

Procedimiento

  1. Habilite la autenticación JWT para el punto final adecuado.
    Si el punto final es la API REST, habilite la autenticación JWT estableciendo el valor de la propiedad servlet.jwt.auth.enabled en true en el archivo customer_overrides.properties . Por ejemplo, xapirest.servlet.jwt.auth.enabled=true.
  2. Según la decisión de utilizar un tipo específico de cargador de claves, debe establecer las configuraciones adecuadas. El cargador de claves se utiliza para obtener la clave pública para verificar el JWT entrante. Sterling™ Order Management System, por defecto, proporciona los siguientes tipos de cargadores de llaves.
    Importante: Si utiliza IBM Sterling® Order Management System on IBM CloudSaaS ), no modifique las propiedades predeterminadas. Utilice la propiedad específica del emisor. Por ejemplo, no modifique el cargador de claves yfs.yfs.jwt.verify.keyloader . En su lugar, añada un nuevo cargador de claves específico del emisor, yfs.yfs.jwt.< nombre_emisor >.verify.keyloader.
    Tabla 1. Cargadores de claves proporcionados por la aplicación
    Tipo de cargador de claves Descripción Configuraciones
    Cargador de claves de propiedades Lee la propiedad específica de las propiedades yfs para obtener la clave. La propiedad contiene el "kid" (ID de clave) obtenido de la cabecera JWT. Basándose en el kid, intenta leer el valor de la clave de las propiedades. Se espera que el valor de la clave sea un formato PEM codificado en Base64 . Es necesario configurar las propiedades siguientes en el archivo customer_overrides.properties para utilizar el cargador de claves de propiedades:
    • yfs.yfs.jwt.verify.keyloader=properties

      El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader=properties

    • yfs.yfs.jwt.verify.propkeyloader.kid=base64 encoded public key
    Cargador de claves públicas URI de Https Proporciona una forma de descargar la clave pública o el certificado de un URI https en el momento de la verificación de JWT. Si se utiliza un URI https, el certificado de este URI https debe añadirse a la JVM o al almacén de confianza del servidor de aplicaciones para que la aplicación pueda conectarse correctamente al URI. Las propiedades siguientes deben configurarse en el archivo customer_overrides.properties para utilizar el cargador de claves públicas de URI https. De forma predeterminada, Sterling Order Management System proporciona los siguientes cargadores de claves URI de https. Puede utilizar cualquiera de estas opciones de cargador de claves de URI.
    • httpsjwks-Las propiedades siguientes deben configurarse en el archivo customer_overrides.properties para utilizar el cargador de claves httpsjwks:
      • yfs.yfs.jwt.verify.keyloader=httpsjwks

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwks

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

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWKS format

    • httpsjwk-Las propiedades siguientes deben configurarse en el archivo customer_overrides.properties para utilizar el cargador de claves httpsjwk:
      • yfs.yfs.jwt.verify.keyloader=httpsjwk

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwk

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

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWK format

    • httpsbase64 -Es necesario configurar las propiedades siguientes en el archivo customer_overrides.properties para utilizar el cargador de claves httpsbase64 :
      • yfs.yfs.jwt.verify.keyloader=httpsbase64

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader=httpsbase64

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

        El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format

    Cargador de claves personalizado Proporciona una forma de cargar la clave de verificación desde una caja fuerte o desde un almacenamiento personalizado. La implementación personalizada debe implementar la interfaz IPLTJWTVerificationKeyLoader. Esta interfaz proporciona un método para devolver una clave. Esta clave se utiliza para verificar la firma de JWS. Si es necesario, puede configurar un cargador de claves personalizado independiente para cada emisor. La propiedad siguiente se debe configurar en el archivo customer_overrides.properties para utilizar un cargador de claves personalizado:
    yfs.yfs.jwt.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    El cargador de claves específico del emisor se puede configurar como: yfs.yfs.jwt.<issuer name>.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    Nota: Si utiliza un proveedor de terceros para JWT, puede utilizar la configuración httpsjwks keyloader para la autenticación JWT. Si el proveedor no da soporte a un punto final JWKS (JSON Web Key Set), puede utilizar las otras opciones que se listan en la tabla Tabla 1 .
  3. Identifique el usuario de OMS a partir de las reclamaciones de carga útil JWT entrantes. Los detalles de usuario de OMS se pueden proporcionar configurando cualquiera de las propiedades siguientes en el archivo customer_overrides.properties :
    • Vía de acceso de usuario de OMS - yfs.yfs.jwt.defclaimparser.user.path=<path relative to the JWT body JSON to read the user>

      La vía de acceso de usuario de OMS específica del emisor se puede configurar como: yfs.yfs.jwt.issuer name.defclaimparser.user.path=path relative to the JWT body JSON to read the user

    • Vía de acceso de correo electrónico de usuario de OMS - yfs.yfs.jwt.defclaimparser.user.email.path=path relative to the JWT body JSON to read the user email

      La vía de acceso de correo electrónico de usuario de OMS específica del emisor se puede configurar como: yfs.yfs.jwt.issuer name.defclaimparser.user.email.path=path relative to the JWT body json to read the user email

    Ejemplo

    Si la carga útil de JWT tiene la estructura JSON siguiente:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "userid" : "testuser",
      "otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    A continuación, para especificar la vía de acceso de usuario, establezca la propiedad en:
    yfs.yfs.jwt.defclaimparser.user.path=userid
    Para especificar la vía de acceso de correo electrónico del usuario, establezca la propiedad en:
    yfs.yfs.jwt.defclaimparser.user.email.path=otherinfo.email

    Es decir, aquí, el punto (.) de la vía de acceso se utiliza para atravesar un objeto hijo en la estructura JSON, para indicar que el objeto email es hijo del objeto otherinfo.

    Nota: Si los valores de <path relative to the JWT body JSON to read the user> o <path relative to the JWT body JSON to read the user email> contienen un carácter de punto (.), debe establecer la propiedad yfs.yfs.jwt.defclaimparser.path.delim para utilizar un delimitador distinto de punto (.). Esto se debe a que el punto es un carácter especial que se utiliza como delimitador de forma predeterminada.
    yfs.yfs.jwt.defclaimparser.path.delim=<value>

    Donde, value es un carácter que no está presente en path relative to the JWT body JSON to read the user o path relative to the JWT body JSON to read the user email.

    Cuando las vías de acceso contienen puntos (.), puede utilizar la propiedad yfs.yfs.jwt.defclaimparser.path.delim para establecer otro delimitador para especificar la vía de acceso.

    Por ejemplo, si la carga útil de JWT tiene la siguiente estructura JSON, donde la vía de acceso de usuario y la vía de acceso de correo electrónico de usuario tienen el carácter de punto:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "www.foo.com/userid" : "testuser",
      "www.foo.com/otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    A continuación, para cambiar el delimitador, establezca la propiedad siguiente:
    yfs.yfs.jwt.defclaimparser.path.delim=$
    Puesto que $ no está presente en la vía de acceso, se puede utilizar como delimitador alternativo.
    Ahora, la vía de acceso de usuario y la vía de acceso de correo electrónico de usuario se pueden especificar de la siguiente manera:
    yfs.yfs.jwt.defclaimparser.user.path=www.foo.com/userid
    yfs.yfs.jwt.defclaimparser.user.email.path=www.foo.com/otherinfo$email

    Aquí, $ en la vía de acceso indica que el objeto email es hijo del objeto www.foo.com/otherinfo.