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
- 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
- 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.enableden true en el archivo customer_overrides.properties . Por ejemplo,xapirest.servlet.jwt.auth.enabled=true. - 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=propertiesEl cargador de claves específico del emisor se puede configurar como:
yfs.yfs.jwt.issuer name.verify.keyloader=propertiesyfs.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=httpsjwksEl cargador de claves específico del emisor se puede configurar como:
yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwksyfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWKS formatEl 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=httpsjwkEl cargador de claves específico del emisor se puede configurar como:
yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwkyfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWK formatEl 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=httpsbase64El cargador de claves específico del emisor se puede configurar como:
yfs.yfs.jwt.issuer name.verify.keyloader=httpsbase64yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in Base64 encoded formatEl 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 interfaceEl cargador de claves específico del emisor se puede configurar como:
yfs.yfs.jwt.<issuer name>.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interfaceNota: 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 . - 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 emailLa 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=useridPara especificar la vía de acceso de correo electrónico del usuario, establezca la propiedad en:yfs.yfs.jwt.defclaimparser.user.email.path=otherinfo.emailEs 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
emailes hijo del objetootherinfo.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 propiedadyfs.yfs.jwt.defclaimparser.path.delimpara 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,
valuees un carácter que no está presente enpath relative to the JWT body JSON to read the useropath 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.delimpara 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:
Puesto queyfs.yfs.jwt.defclaimparser.path.delim=$$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$emailAquí,
$en la vía de acceso indica que el objetoemailes hijo del objetowww.foo.com/otherinfo. - Vía de acceso de usuario de OMS -