• Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram

S4PCADEMY_Logo
  • Inicio
  • Novedades
  • Academia SAP
  • FAQ
  • Blog
  • Contacto
Twitter Linkedin Instagram
Cloud Foundry Environment  ·  service key in btp  ·  Technical Articles

Notificación de vencimiento de claves de servicio (certificados) en Cloud Foundry a través de iFlows en SAP Integration Suite

By s4pcademy 


Hola comunidad SAP,

en el contexto de un proyecto de migración de SAP CPI Neo a SAP IS Cloud Foundry (CF) Environment, estaba buscando una solución para generar una notificación para los administradores sobre el vencimiento de las claves de servicio (certificados) en SAP BTP CF por correo electrónico. Encontré algunas soluciones para certificados en el almacén de claves, pero ninguna solución para las claves de servicio, así que creé una en forma de iFlow.

Fondo

Al realizar una migración de SAP CPI en Neo Environment a SAP Integration Suite en Cloud Foundry, encontrará varias diferencias entre los dos sistemas. Ya existen muchos Blogs y Guías con información detallada sobre las diferencias y mejores prácticas para Migración de Neo Environment a Multi-Cloud Foundation (Cloud Foundry y Kyma)pero me gustaría centrarme principalmente en un punto:

Para configurar conexiones HTTP entrantes para el procesamiento de flujo de integración en SAP Cloud Foundry Environment, es necesario crear una instancia de servicio y una clave de servicio para la autenticación entrante (Ayuda SAP). Según su caso de uso, puede crear tres tipos diferentes de claves de servicio:

  1. ID de cliente/secreto
  2. Certificado
  3. Certificado externo

Para obtener más información, consulte ayuda.sap

Si su caso de uso requiere Certificado externo Por ejemplo, para la autenticación entrante de SAP ERP-Systems a SAP Integration Suite, puede agregar un certificado de cliente remitente (proporcionado por el administrador del remitente) a la clave de servicio y mantener la fecha de validez (válida hasta).

Para garantizar una comunicación constante, es importante renovar los certificados antes de que caduquen.

Empezando:

En primer lugar, busqué la posibilidad de recuperar la información de la clave de servicio llamando al punto final de CF-API. Dependiendo de su entorno, puede encontrar el punto final de su API de Cloud Foundry en una de sus subcuentas.

Para obtener la información de la clave de servicio, es necesario usar la API cloud_controller, se puede encontrar la documentación para V3 aquí (V2 ya está en desuso).

Autenticación:

La API de Cloud Foundry V3 está protegida mediante OAuth 2. Se espera que los clientes presenten un token de portador válido a través del encabezado HTTP, que se puede obtener del servidor UUA de Cloud Foundry o a través de CF CLI.

La única solución que funcionó en mis pruebas se basó en lo siguiente correo:

Probé diferentes versiones para obtener un token de autorización válido para CF-API, pero la solución a continuación fue la única que funcionó para mí con Postman.

SAP Integration Suite ofrece tres opciones para los materiales de seguridad de OAuth2: credenciales de cliente de OAuth2, afirmación de portador de SAML de OAuth2 y código de autorización de OAuth2. Ninguno de ellos funcionará con la contraseña grant_type. Una forma de obtener un token es crear los datos de autorización necesarios para una solicitud GET a través de groovyscript en CPI:

  1. Cree dos Credenciales de Cliente diferentes como Material de Seguridad:
    1. CF_API_Nombre de usuario : contiene el nombre de usuario y la contraseña de un usuario de SAP BTP con los permisos necesarios (¡solo use usuarios técnicos aquí!)
    2. CF_API_ID de cliente: Usuario = cf y deje la contraseña vacía
  2. Cree un iFlow con un temporizador de inicio y un modificador de contenido
    1. Encabezado del mensaje: Tipo de contenido = application/x-www-form-urlencoded
    2. Propiedad de intercambio: ApiUserCredentials = {{CF_API_Username}} para configuración externa
  3. Crear paso de guión:
import com.sap.gateway.ip.core.customdev.util.Message;
import java.util.HashMap;
import com.sap.it.api.ITApiFactory;
import com.sap.it.api.securestore.SecureStoreService;
import com.sap.it.api.securestore.UserCredential;

def Message processData(Message message) {

//get User from Configuration
def map = message.getProperties();
String user = map.get("ApiUserCredentials");

//service to get the credentials
def service = ITApiFactory.getApi(SecureStoreService.class, null);

//get user credential
def userCred = service.getUserCredential(user);
if (userCred == null){
throw new IllegalStateException("No User credential found for alias" + user);}

//HTTP Parameters value
String grant_type = "password";
String username = userCred.getUsername();
String password = new String(userCred.getPassword());

//Query
def query = "grant_type=" + grant_type + "&username=" + username + "&password=" + password;

message.setBody(query);

return message;

}

(Residencia en correo)

4. Adaptador HTTP de usuario para obtener un token

Recibirá una respuesta en el siguiente formato:

{
    "access_token": "<Token>",
    "token_type": "bearer",
    "id_token": "<id_toke>",
    "refresh_token": "<refresh_token<",
    "expires_in": 1199,
    "scope": "openid uaa.user cloud_controller.read password.write cloud_controller.write",
    "jti": "<jti>"
}

5. Use una secuencia de comandos adicional para extraer el token del cuerpo de la respuesta y configurarlo como encabezado de autorización

import com.sap.gateway.ip.core.customdev.util.Message;
import groovy.json.*

def Message processData(Message message) {

    def json = new JsonSlurper().parseText(message.getBody(String));
    message.setHeader("Authorization", json.token_type + " " + json.access_token)
    message.setBody()

    return message;
}

Obtenga la API del formulario Service-Key-Details

Los objetos necesarios se pueden encontrar en la entidad «service_credential_bindings». Para enumerar todos los service_credential_bindings, debe usar la siguiente definición y parámetros:

OBTENER /v3/service_credential_bindings

Parámetros de consulta

Nombre Tipo Descripción
service_instance_guids lista de cadenas Lista delimitada por comas de GUID de instancias de servicio para filtrar
tipo lista de cadenas Tipo de enlace de credencial por el que filtrar. Los valores válidos son: app o key

Encontrará service_instance_guids en los detalles de sus service_instances.

  1. Use el adaptador HTTP para obtener una lista de service_credential_bindings

Recibirá una lista de recursos del tipo «clave». Como no contienen el campo “válido hasta” es necesario verificar los detalles de cada Clave de Servicio. La URL para verificar los detalles ya se proporciona para cada recurso en el cuerpo

[..]
"links": {
                "self": {
                    "href": "https://host/v3/service_credential_bindings/<guid>"
                },
                "details": {
                    "href": "https://host/v3/service_credential_bindings/<guid>/details"
                },

7. Convierta y divida los mensajes en XPath “//resources”

8. Para cada mensaje generado, llame a un proceso de integración local que extraiga la URL del punto final para los detalles clave del servicio y envíe una solicitud HTTP.

Como el token de autorización tiene una validez muy larga, no es necesario generar un nuevo token y agregarlo a los encabezados, por lo que puede reutilizar el token que ya estaba configurado como encabezado de autorización. Si tiene problemas aquí, es posible que deba recuperar un nuevo token de autorización.

Recibirá toda la información necesaria para cada clave de servicio

"certificatedetails": {
                "issuerdn": "CN=DigiCert TLS RSA SHA256 2020 CA1,O=DigiCert Inc,C=US",
                "subjectdn": "<subjectdn>",
                "validuntil": "2023-05-03T23:59:59.000Z",
                "serialnumber": "<serialnumber>"
            }

9. Extraiga el valor «válido hasta» en un modificador de contenido

10. Use un script para verificar los días hasta el vencimiento y configúrelos como propiedad

11. Cree un enrutador con días configurables hasta el vencimiento

12. Use un modificador de contenido para crear un cuerpo de correo y un adaptador de correo de usuario para enviar información por correo a los administradores

Así que el resultado podría verse así:

Reanudar

En esta publicación, traté de proporcionar una breve explicación para crear un iFlow para generar notificaciones por correo electrónico para las claves de servicio que caducan en diferentes instancias de servicio. Esta es solo una forma que funcionó para mí, pero si alguien tiene una mejor solución, especialmente cómo obtener un token para CF-API, estoy abierto a mejoras. ¡Muchas gracias!



Source link


certificadosclavesCloudFoundryIflowsIntegrationNotificaciónSAPservicioSuitetravésvencimiento

Artículos relacionados


Personal Insights  ·  sapacademy
Reflexión de aniversario de graduación de 3 años de SAP Academy for Engineering
Product Information
Reconocimiento de ingresos de SAP S/4HANA con análisis de resultados: PoC basado en costos
CDS views connectivity  ·  HANA CDS Views  ·  odata development  ·  Product Information  ·  SAC Standard Content
S/4Hana On-Prem CDS ve la conectividad con SAP Analytics Cloud mediante el modo de conexión de adquisición

Deja tu comentario Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

SAP Inside Track São Paulo 2023
Previo
Comprobación de preparación de SAP para SAP S/4HANA: archivo de entrada del analizador de notas
Siguiente

Madrid

Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010

México

Paseo de la Reforma 26
Colonia Juárez,  Cuauhtémoc
Ciudad de México 06600

Costa Rica

Real Cariari
Autopista General Cañas, 
San José, SJ 40104

Perú

Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073

Twitter Linkedin Instagram
Copyright 2022 | All Right Reserved.
Cookies Para que este sitio funcione adecuadamente, a veces instalamos en los dispositivos de los usuarios pequeños ficheros de datos, conocidos como cookies. La mayoría de los grandes sitios web también lo hacen.
Aceptar
Cambiar ajustes
Configuración de Cookie Box
Configuración de Cookie Box

Ajustes de privacidad

Decida qué cookies quiere permitir. Puede cambiar estos ajustes en cualquier momento. Sin embargo, esto puede hacer que algunas funciones dejen de estar disponibles. Para obtener información sobre eliminar las cookies, por favor consulte la función de ayuda de su navegador. Aprenda más sobre las cookies que usamos.

Con el deslizador, puede habilitar o deshabilitar los diferentes tipos de cookies:

  • Bloquear todas
  • Essentials
  • Funcionalidad
  • Análisis
  • Publicidad

Este sitio web hará:

Este sitio web no:

  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
  • Recuerde sus detalles de inicio de sesión
  • Esencial: recuerde su configuración de permiso de cookie
  • Esencial: Permitir cookies de sesión
  • Esencial: Reúna la información que ingresa en un formulario de contacto, boletín informativo y otros formularios en todas las páginas
  • Esencial: haga un seguimiento de lo que ingresa en un carrito de compras
  • Esencial: autentica que has iniciado sesión en tu cuenta de usuario
  • Esencial: recuerda la versión de idioma que seleccionaste
  • Functionality: Remember social media settings
  • Functionality: Remember selected region and country
  • Analytics: Keep track of your visited pages and interaction taken
  • Analytics: Keep track about your location and region based on your IP number
  • Analytics: Keep track of the time spent on each page
  • Analytics: Increase the data quality of the statistics functions
  • Advertising: Tailor information and advertising to your interests based on e.g. the content you have visited before. (Currently we do not use targeting or targeting cookies.
  • Advertising: Gather personally identifiable information such as name and location
Guardar y cerrar