
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 – 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.
Calle Eloy Gonzalo, 27
Madrid, Madrid.
Código Postal 28010
Paseo de la Reforma 26
Colonia Juárez, Cuauhtémoc
Ciudad de México 06600
Real Cariari
Autopista General Cañas,
San José, SJ 40104
Av. Jorge Basadre 349
San Isidro
Lima, LIM 15073