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

Ejecute NodeJs en SAP BTP y localmente, Parte – 2

By s4pcademy 


Esta serie de blogs es solo una demostración simple de cómo crear cualquier aplicación Nodejs y ejecutarla tanto en la plataforma local como en la plataforma SAP BTP.

Parte – 1: Crear aplicación nodejs.

Parte – 2: Crear instancia de autenticación.

Parte – 3: Ejecute la aplicación localmente

Crear autenticación

Para ello necesitaremos autorización BTP y servicio de gestión de confianza (XSUAA)

Que crearemos usando el archivo MTA.yaml.

resources:
 - name: basicnodejs-xsuaa
   type: org.cloudfoundry.managed-service
   parameters:
     service: xsuaa
     service-plan: application 
     config:
        xsappname: basicnodejs-${org}-${space}
        tenant-mode: dedicated    

compila e implementa el archivo mta.yaml.

Pero, ¿quién va a utilizar estos servicios?

Tenemos que especificar que dos módulos van a acceder a este servicio. Enlace esos módulos con el servicio de instancia xsuaa.

ID: basicnodejs
_schema-version: '3.1'
version: 0.0.1
parameters:
  enable-parallel-deployments: true

modules:
  - name: basicnodejs-service
    type: nodejs
    path: srv
    build-parameters:
      ignore:
        - 'default-*.json'
        - .env
        - '*node_modules*'
        - package-lock.json
    provides:
      - name: srv-api
        properties:
          srv-url: ${default-url}
    requires:
      - name: basicnodejs-xsuaa

  - name: basicnodejs-approuter
    type: approuter.nodejs
    path: app
    build-parameters:
      ignore:
        - 'default-*.json'
        - .env
        - '*node_modules*'
        - package-lock.json
    parameters:
      memory: 256M
      disk-quota: 512M
      keep-existing-routes: true
    requires:
      - name: srv-api
        group: destinations
        properties:
          name: srv-api # must be used in xs-app.json as well
          url: ~{srv-url}
      	  forwardAuthToken: true
      - name: basicnodejs-xsuaa

resources:
 - name: basicnodejs-xsuaa
   type: org.cloudfoundry.managed-service
   parameters:  
     service: xsuaa
     service-plan: application 
     config:
        xsappname: basicnodejs-${org}-${space}
        tenant-mode: dedicated

Tenga en cuenta que hemos agregado una propiedad más dentro del módulo approuter.

reenviarAuthToken: verdadero

No utilizará el mecanismo de autenticación en BTP hasta que mencionemos la ruta del parámetro en xs-app.json.

{
    "authenticationMethod": "route",
    "routes": [{
        "source": "^/(.*)$",
        "target": "$1",
        "destination": "srv-api"
    }]
}

Esto nos redirigirá a la página de inicio de sesión de BTP si no ha iniciado sesión.

Incluso si proporcionamos las credenciales BTP, no podemos acceder a nuestra aplicación deseada.

Un parámetro más en el servicio XSUAA indica a dónde redirigir después de la autenticación.

resources:
 - name: basicnodejs-xsuaa
   type: org.cloudfoundry.managed-service
   parameters:  
     service: xsuaa
     service-plan: application 
     config:
        xsappname: basicnodejs-${org}-${space}
        tenant-mode: dedicated
        oauth2-configuration:
          redirect-uris:
          - "https://*.hana.ondemand.com/**"

Implemente y ejecute el aprobador. Le pedirá que inicie sesión y luego lo llevará al Servicio.

Espere… Aunque hemos realizado el mecanismo de autenticación, podemos acceder a la URL directa del servicio basicnodejs en BTP.

Debido a que no hemos proporcionado ninguna condición en el servicio, si el usuario está autenticado por la XSUAA. En CAPM es manejado por el marco.

Pero nuestro caso tenemos que hacerlo manualmente.

Agreguemos algunos paquetes npm y modifiquemos el archivo server.js.

npm install @sap/xsenv @sap/xssec passport

En srv -> archivo server.js –

const express = require("express");
const passport = require("passport");
const xsenv = require("@sap/xsenv");
const JWTStrategy = require("@sap/xssec").JWTStrategy;
const services = xsenv.getServices({ uaa:"basicnodejs-xsuaa" });  // XSUAA service

const app = express();

passport.use(new JWTStrategy(services.uaa));
app.use(passport.initialize());
app.use(passport.authenticate("JWT", { session: false }));

app.get("/", function (req, res, next) {
  res.send("Welcome User: " + req.user.name.givenName);
});

const port = process.env.PORT || 5000;
app.listen(port, function () {
  console.log("Basic NodeJs listening on port " + port);
});

Cree e implemente mta.yaml

Ahora intente ejecutar la URL del servicio basicnodejs desde BTP.

Ejecutar aprobador –

En esta parte, creó la instancia xsuaa y ejecutó la aplicación solo desde approuter.

A continuación, ejecutaremos la misma aplicación desde BAS.




Ejecute NodeJs en SAP BTP y localmente
Previo
Cómo verificar su código personalizado para ABAP Cloud
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.