Apps de fondo
Puede utilizar las API y SDK de IBM Cloud® App ID para proteger las API y puntos finales de la aplicación de fondo.
Comprensión del flujo
Parte del desarrollo de apps de fondo es verificar que las API estén protegidas del acceso no autorizado. Los SDK de App ID le ayudan a proteger los puntos finales de la API y a garantizar la seguridad de la aplicación.
¿Cuál es la base técnica del flujo?
App ID implementa OAuth 2.0 y la especificación OIDC, que utiliza tokens de portador para autenticación y autorización. Estos tokens se formatean como JSON Web Tokens, que están firmados digitalmente y contienen reivindicaciones que describen al sujeto que se está autenticando y al proveedor de identidad. Las API de la aplicación están protegidas por señales de identidad y acceso. Es posible autenticar los clientes que necesitan acceso a las API con el proveedor de identidad mediante App ID a cambio de estas señales. Las reclamaciones de las señales deben validarse para otorgar acceso a las API protegidas.
Para obtener más información sobre cómo se utilizan las señales en App ID, consulte Comprensión de las señales.
¿Qué aspecto tiene el flujo?
-
Un cliente realiza una solicitud POST al servidor de autorización de App ID para obtener una señal de acceso. Por lo general, una solicitud POST tiene el formato siguiente:
POST /oauth/v4/<tenantID>/token HTTP/1.1 Content_type: application/x-www-form-urlencoded Authorization header = "Basic" + base64encode(<clientID>:<secret>) FormData = <grantType>
-
Si el cliente cumple con las cualificaciones, el servidor de autorización devolverá una señal de acceso.
-
El cliente envía una solicitud al recurso protegido. Las solicitudes se pueden enviar de varias formas, en función de la biblioteca de cliente HTTP que esté utilizando, pero en general una solicitud adopta el formato siguiente:
curl -H 'Authorization: Bearer <accessToken>' <https://my-protected-resource.com>
-
El recurso protegido o la API validan la señal. Si la señal es válida, se otorgará el acceso al recurso para el cliente. Si la señal no se puede validar, se denegará el acceso.
Para obtener información sobre cómo configurar la aplicación para que utilice Liberty for Java, consulte la Guía de aprendizaje de aplicaciones de programa de fondo de Liberty for Java.
Protección de recursos utilizando el SDK de Node.js
Puede utilizar los SDK de App ID para aplicar la autenticación y la autorización en las aplicaciones del lado del servidor. ApiStrategy
trabaja con sus recursos de fondo solicitando que las señales de identidad y acceso se validen
como parte de la solicitud. El App ID Node.js SDK funciona con el framework Passport.
Consulte el siguiente vídeo para obtener más información sobre la protección de las aplicaciones Node de fondo con App ID. A continuación, pruébalo tú mismo utilizando una sencilla aplicación Node de ejemplo.
Antes de empezar
Antes de empezar a utilizar el SDK de Node.js, debe cumplir los siguientes requisitos previos.
- Una instancia de App ID
- NPM versión 4 o superior
- Node versión 6 o superior
Instalación del SDK de Node.js
-
Añada el SDK de Node.js de App ID en el archivo
package.json
de su app."dependencies": { "ibmcloud-appid": "^7.0.0" }
-
Ejecute el mandato siguiente.
npm install
Inicialización del SDK de Node.js
-
Obtenga el
oauth server url
.- Vaya al separador Credenciales de servicio del panel de control de App ID.
- Si aún no dispone de un conjunto de credenciales, pulse en Nueva credencial y, a continuación, en Añadir para crear uno nuevo. Si ya lo tiene, omita este paso.
- Pulse en el conmutador Ver credenciales para ver la información.
- Copie el
oauth server url
para utilizarlo en el paso siguiente.
-
Inicialice la estrategia Passport de App ID como se muestra en el ejemplo siguiente.
var express = require('express'); var passport = require('passport'); var APIStrategy = require('ibmcloud-appid').APIStrategy; passport.use(new APIStrategy({ oauthServerUrl: "<oauthServerUrl>" })); var app = express(); app.use(passport.initialize());
Protección de la API con la estrategia de API
El fragmento de código siguiente muestra cómo utilizar ApiStrategy
en una app Express para proteger la API GET /protected
.
Si la app Node.js se ejecuta en IBM Cloud y está enlazada a la instancia de App ID, no será necesario proporcionar la configuración de estrategia de la API. La configuración de App ID obtiene la información utilizando la variable de entorno VCAP_SERVICES.
app.get('/protected_resource', passport.authenticate('APIStrategy.STRATEGY_NAME', { session: false }), function(request, response){
console.log("Security context", request.appIdAuthorizationContext);
response.send(200, "Success!");
}
);
Cuando las señales son válidas, se llama al siguiente middleware en la cadena de solicitudes y la propiedad appIdAuthorizationContext
se añade al objeto de solicitud. La propiedad contiene el acceso original y las señales de identidad,
además de información de carga útil descodificada de las señales.
Protección de recursos utilizando el SDK de Swift
El SDK de Swift del lado del servidor de App ID proporciona un plug-in de middleware de protección de API que se utiliza para proteger las aplicaciones de fondo. Al asociar las API con el middleware, puede proteger la app de acceso no autorizado. Una vez que la API esté protegida, el middleware garantiza que las señales generadas por App ID estén validadas. Entonces podrá modificar el comportamiento de la API dependiendo de los resultados de la validación.
import Foundation
import Kitura // server
import Credentials // middleware
import IBMCloudAppID // SDK
// setup routes
let router = Router()
// mandatory option to be passed in if app not deployed on IBM Cloud
let options = [
"oauthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/d8438de6-c325-4956-ad34-abd49194affd",
]
let apiCreds = Credentials()
// Minimum macOS version required
if #available(OSX 10.12, *) {
// setup API protection
let apiKituraCredentialsPlugin = APIKituraCredentialsPlugin(options: options)
apiCreds.register(plugin: apiKituraCredentialsPlugin)
// associate route with API protection
router.all(middleware: apiCreds)
// create protected API
router.get("/protectedendpoint") { request, response, next in
response.headers["Content-Type"] = "text/html; charset=utf-8"
do {
if let userProfile = request.userProfile {
try response.status(.OK).send(
"<!DOCTYPE html><html><body>" +
"Welcome " + userProfile.displayName +
"! You are logged in with " + userProfile.provider + "." +
"</body></html>\n\n").end()
next()
return
}
try response.status(.unauthorized).send(
"<!DOCTYPE html><html><body>” + “You are not authorized!" +
"</body></html>\n\n").end()
}
catch {}
next()
}
// Start server
Kitura.addHTTPServer(onPort: 8090, with: router)
Kitura.run()
}
Protección de recursos de forma manual
Para proteger las apps de fondo y los recursos protegidos, tiene que validar una señal. Cuando un cliente envía una solicitud al recurso, puede verificar que la señal cumpla las especificaciones definidas. La señal puede incluir información de identificación, el ámbito o cualquier otra configuración que tenga establecida. Puede validar señales de identidad y acceso de App ID de diversas formas. Para obtener ayuda, consulte Validación de señales.
Próximos pasos
Con App ID instalado en la aplicación, casi está listo para iniciar la autenticación de usuarios. A continuación, intente realizar una de las siguientes actividades:
- Configure los proveedores de identidad
- Personalice y configure el widget de inicio de sesión
- Más información sobre el SDK deNode.js
- Más información sobre el SDKSwift