Cliente OAuth 2.0

ABAP Standard

Implementar un cliente OAuth 2.0 en ABAP permitirá conectar de forma segura a servicios web que requieran autenticación OAuth. A continuación, le proporcionamos los elementos necesarios de cómo se podría implementar un cliente OAuth 2.0 en ABAP:

Caso I – Cliente OAuth con perfil disponible en ABAP

El sistema ABAP dispone de algunos tipos de perfiles para el cliente OAuth 2.0 predefinidos que se podrían usar sin la necesidad de crear un tipo adicional.

Entre los tipos disponible mencionamos los siguientes:

  • ABAP
  • CANARY(NEO)
  • GITHUB
  • HANA_CLOUD_PLATFORM
  • ILMAZURE
  • JAM
  • LCM_ICRTS
  • LCM_MSTEAMS
  • SUCCESSFACTORS
  • /BSNAGT/IAS_APP2APP
  • /PMO/MUC_RE_NATHAN

Para Caso I iremos a utilizar el perfil DEFAULT como ejemplo, empezando con la creación del perfil OAuth 2.0.

OAuth 2.0 Client Profile

Desde la SE80 se crea el perfil del cliente OAuth 2.0

1 2
Cliente OAuth 2.0 52

Asignamos el tipo DEFAULT y el nombre del perfil.

2 2
Cliente OAuth 2.0 53

Aparte, es posible asignar el alcance del perfil desde la pestaña SCOPE si se desea limitar su uso para ciertas operaciones. Para este caso no agregaremos ningún alcance adicional.

3 2
Cliente OAuth 2.0 54

OAuth 2.0 Client

Desde la transacción OA2C_CONFIG crearemos el cliente OAuth 2.0. Esta transacción abre en el navegador el servicio con el mismo nombre OA2C_CONFIG disponible en la ruta /sap/bc/webdynpro/sap/oa2c_config.

4 2
Cliente OAuth 2.0 55

A continuación crearemos el cliente OAuth 2.0 utilizando el anterior perfil para un escenario cuyo tipo de acceso es por Client Credentials.

¿Qué se necesita?

  • Authorization Endpoint
  • Token Endpoint

En la configuración se proporcionará la url del servicio de autenticación que permite obtener el Token de acceso que después se utilizará en la llamada al servicio que se desea consumir.

Para este ejemplo utilizaremos el endpoint de un servicio REST expuesto en BTP y que tiene habilitado el OAuth 2.0, cuyo token endpoint es: https://5f73f9cftrial.authentication.us10.hana.ondemand.com/oauth/token

Con la opción Create empezamos la configuración seleccionado el perfil creado en el anterior paso e indicando junto con el nombre (que puede ser el mismo que el perfil) el cliente ID del endpoint que nos permite obtener el Token.

5 2
Cliente OAuth 2.0 56

En la sección de la configuración general se indica el Client Secret.

6 2
Cliente OAuth 2.0 57

En la configuración del servidor de autorización se agrega el endpoint del Token.

7 2
Cliente OAuth 2.0 58

Continuamos con la configuración del acceso.

8 2
Cliente OAuth 2.0 59

Para el SSL Client PSE elegimos ANONYM SSL Client.

9 2
Cliente OAuth 2.0 60

Observación: El equipo basis se encargará de configurar los certificados necesarios para el perfil Anonymous.

Caso II – Cliente OAuth con perfil personalizado

OAuth 2.0 Client Service Provider Types

Para los flujos OAuth cuyo tipo de perfil no existe en ABAP, se deben crear el tipo. Ejecutando la transacción OA2C_TYPES es posible crear el tipo personalizado o custom.

10 1
Cliente OAuth 2.0 61

BADI implementación – Service Provider Type

Se debe crear una clase ABAP que hereda de la clase estándar CL_OA2C_SPECIFICS_ABSTRACT. Se redefine el método IF_OA2C_SPECIFICS~GET_ENDPOINT_SETTINGS para agregar los endpoints.

11 1
Cliente OAuth 2.0 62

Implementamos el código que permite asignar los endpoints del servidor de autorización.

12 1
Cliente OAuth 2.0 63

La redefinición e implementación del método IF_OA2C_SPECIFICS~GET_SUPPORTED_GRANT_TYPES permite redefinir los tipos de acceso soportados (grant types).

13 1
Cliente OAuth 2.0 64

El método IF_OA2C_SPECIFICS~GET_CONFIG_EXTENSION permite redefinir la extensión de la configuración.

14 1
Cliente OAuth 2.0 65

El método IF_OA2C_SPECIFICS~GET_AC_AUTH_REQU_PARAM_NAMES permite redefinir los parámetros de la petición. Estos parámetros se deberían obtener de la misma entidad que permite obtener el Token.

15 1
Cliente OAuth 2.0 66

Desde la transacción SE80 se puede abrir el paquete SOAUTH2_CLIENT_EXTENSIONS que contiene el punto de extensión OA2C_SPECIFICS. Agregamos la implementación.

16 1
Cliente OAuth 2.0 67

Se indica el nombre y la descripción de la implementación.

17 1
Cliente OAuth 2.0 68

Se asigna la implementación de la BAdI, la clase de implementación creada anteriormente y la definición de la BAdI.

18 2
Cliente OAuth 2.0 69

En el siguiente paso se agrega el filtro con el nombre del tipo de OAuth creado en el primer paso:

19 1
Cliente OAuth 2.0 70
20 1
Cliente OAuth 2.0 71

Se activa la implementación de la BAdI.

BADI implementación – Configuración de la Extensión

En segundo lugar, es necesario implementar una clase que se utilizará para completar correctamente los parámetros adicionales de OAuth 2.0 específicos. La clase debe implementar la interfaz IF_OA2C_CONFIG_EXTENSION.

21 1
Cliente OAuth 2.0 72

En la implementación del método if_oa2c_config_extension~get_ac_auth_requ_params se agregan los parámetros necesarios para obtener el token.

22 1
Cliente OAuth 2.0 73

Se activa la clase y se procede con la implementación de la BAdI.

23 2
Cliente OAuth 2.0 74

Se indica el nombre y la descripción de la implementación.

24 1
Cliente OAuth 2.0 75

Se asigna la implementación de la BAdI, la clase de implementación creada anteriormente y la definición de la BAdI.

25 1
Cliente OAuth 2.0 76

En el siguiente paso se agrega el filtro con el nombre del tipo de OAuth creado en el primer paso:

26 1
Cliente OAuth 2.0 77
27 1
Cliente OAuth 2.0 78

OAuth 2.0 Client Profile

Se crea el perfil OAuth en base al tipo anteriormente creado, usando la transacción SE80.

28 1
Cliente OAuth 2.0 79

Asignamos el tipo personalizado y el nombre del perfil.

29 1
Cliente OAuth 2.0 80

Guardamos el perfil.

30 1
Cliente OAuth 2.0 81

OAuth 2.0 Client

Desde la transacción OA2C_CONFIG crearemos el cliente OAuth 2.0.

31 1
Cliente OAuth 2.0 82

Configuración general:

32 1
Cliente OAuth 2.0 83

Configuración del servidor de autorización:

33
Cliente OAuth 2.0 84

Configuración de acceso:

34
Cliente OAuth 2.0 85
35 1
Cliente OAuth 2.0 86

ABAP Consumo REST con perfil OAuth 2.0

Para este escenario iremos a utilizar un servicio REST expuesto en BTP que tiene habilitado el flujo OAuth 2.0 para su consumo. Además iremos a utilizar el cliente OAuth que se ha configurado previamente (tr. OA2C_CONFIG).

Obtenemos la instancia del cliente HTTP en base al endpoint del servicio REST a consumir.

36
Cliente OAuth 2.0 87

Se indica el método invocado.

A la anterior instancia se inyecta el token en base al perfil y configuración OAuth 2.0

37
Cliente OAuth 2.0 88

Se establece el método HTTP que se va a invocar y se realiza la petición.

38
Cliente OAuth 2.0 89

Se recupera la respuesta y los datos.

39
Cliente OAuth 2.0 90

ABAP Consumo REST sin perfil OAuth 2.0

Es posible realizar la llamada al servicio REST que requiere el token OAuth 2.0 utilizando la clase estándar CL_HTTP_CLIENT para invocar las dos peticiones, primero al servidor de autorización que devuelve el token y después al endpoint del servicio agregando el token en la cabecera.

Se crea la instancia HTTP para el endpoint del servidor de autorización que devuelve el token.

40
Cliente OAuth 2.0 91

Se establece el método POST y se agregan los parámetros de cabecera.

41
Cliente OAuth 2.0 92

Las credenciales CLIENT_ID y CLIENT_SECRET se van a enviar en la cabecera de la petición con el parámetros Authorization de la siguiente forma: Basic CLIENT_ID:CLIENT_SECRET (en base 64). Para este ejemplo no se agrega la lógica de cómo convertir en ABAP el ID del cliente más el SECRET separado por dos puntos, simplemente usamos el valor ya convertido.

42
Cliente OAuth 2.0 93

Se envía la petición.

43
Cliente OAuth 2.0 94

Se recupera la respuesta que contendrá el token.

44
Cliente OAuth 2.0 95

Se procede con la deserialización de la respuesta para manipular la información del token en una estructura ABAP.

45
Cliente OAuth 2.0 96

Se obtiene la instancia del cliente HTTP que se usará para realizar la petición al servicio REST.

46
Cliente OAuth 2.0 97
47
Cliente OAuth 2.0 98

Para este ejemplo se invoca el método GET.

48
Cliente OAuth 2.0 99

Se recibe la respuesta.

49
Cliente OAuth 2.0 100

En modo debug se puede observar el cuerpo de la respuesta.

50
Cliente OAuth 2.0 101

Deja una respuesta

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