Applicazioni web
Quando stai sviluppando un'applicazione web, puoi utilizzare il flusso web IBM Cloud® App ID per autenticare in modo sicuro gli utenti. Gli utenti sono quindi in grado di accedere al contenuto protetto lato server nelle tue applicazioni web.
Descrizione del flusso
Le app web spesso richiedono agli utenti di autenticarsi per accedere ai contenuti protetti. App ID utilizza il flusso di codice di autorizzazione OIDC per autenticare correttamente gli utenti. Con questo flusso, dopo che l'utente è stato autenticato, l'applicazione riceve un codice di autorizzazione. Il codice viene quindi scambiato con un token di accesso, identità e aggiornamento. Nel codice, la fase di scambio dei token viene sempre inviata utilizzando un backchannel sicuro tra l'app e il server OIDC. Questo processo fornisce un ulteriore livello di sicurezza, in quanto l'attaccante non è in grado di intercettare i token. Questi token possono essere inviati direttamente all'applicazione che contiene il server web per l'autenticazione dell'utente.
-
Un utente avvia il flusso di autorizzazione inviando una richiesta all'endpoint
/authorizationtramite l'API o l'SDK App ID. -
Se l'utente non è autorizzato, il flusso di autenticazione viene avviato con un reindirizzamento a App ID.
-
A seconda dei parametri della richiesta
/authorizationo della configurazione del provider di identità dell'utente, viene avviato il Widget di accesso nel browser dell'utente. -
L'utente sceglie un provider di identità per l'autenticazione e completa il processo di accesso.
-
Il provider di identità esegue il reindirizzamento all'applicazione client con il codice di autorizzazione.
-
L'SDK App ID scambia il codice di autorizzazione con i token di accesso, identità e aggiornamento facoltativo dal servizio App ID.
-
I token vengono salvati dall'SDK App ID e si verifica un reindirizzamento all'applicazione client.
-
All'utente viene concesso l'accesso all'applicazione.
Configurazione dell'SDK Node.js
Puoi configurare App ID per utilizzare le tue applicazioni web Node.js.
Prima di iniziare
Devi avere i seguenti prerequisiti:
- Un'istanza del servizio App ID
- Una serie di credenziali del servizio
- NPM versione 4 o superiore
- Node versione 6 o superiore
- Il tuo URI di reindirizzamento impostato nel dashboard del servizio App ID
Provatelo voi stessi utilizzando una semplice applicazione di esempio Node.
Installazione dell'SDK Node.js
-
Utilizzando la riga di comando, passa alla directory che contiene la tua applicazione Node.js.
-
Installa il servizio App ID.
npm install --save ibmcloud-appid
Inizializzazione dell'SDK Node.js
-
Aggiungi le seguenti definizioni
requireal tuo fileserver.js.const express = require('express'); const session = require('express-session') const passport = require('passport'); const WebAppStrategy = require("ibmcloud-appid").WebAppStrategy; const CALLBACK_URL = "/ibm/cloud/appid/callback"; -
Configura la tua applicazione Express per utilizzare il middleware della sessione Express.
const app = express(); app.use(session({ secret: "123456", resave: true, saveUninitialized: true })); app.use(passport.initialize()); app.use(passport.session());Devi configurare il middleware con l'archivio della sessione appropriato per gli ambienti di produzione. Per ulteriori informazioni, vedere il file express.js.
-
Ottieni le tue credenziali in uno dei seguenti modi.
-
Passando alla scheda Applications del dashboard App ID. Se non hai un'applicazione nell'elenco, puoi fare clic su Add application per crearne una,
-
Effettuando una richiesta POST all'endpoint
/management/v4/<tenantId>/applications.Formato della richiesta:
curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -d '{"name": "ApplicationName"}'Risposta di esempio:
{ "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f", "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61", "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4", "name": "ApplicationName", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61" }
-
-
Facoltativo: decidi come formattare il tuo URI di reindirizzamento. Il reindirizzamento può essere formattato in due diversi modi. Se non viene fornita nessuna delle seguenti opzioni, l'SDK App ID cerca di recuperare l'indirizzo
application_uridell'applicazione in esecuzione su IBM Cloud e aggiunge un suffisso predefinito/ibm/cloud/appid/callback.- Manualmente in un nuovo
WebAppStrategy({redirectUri: "...."}) - Come una variabile di ambiente denominata
redirectUri
- Manualmente in un nuovo
-
Utilizzando le informazioni ottenute nei passi precedenti, inizializza l'SDK.
passport.use(new WebAppStrategy({ tenantId: "<tenantID>", clientId: "<clientID>", secret: "<secret>", oauthServerUrl: "<oauthServerURL>", redirectUri: "<appURL>" + CALLBACK_URL })); -
Configura passport con la serializzazione e la deserializzazione. Questo passo di configurazione è obbligatorio per la persistenza della sessione autenticata attraverso le richieste HTTP. Per ulteriori informazioni, consultare i documenti del passaporto.
passport.serializeUser(function(user, cb) { cb(null, user); }); passport.deserializeUser(function(obj, cb) { cb(null, obj); }); -
Aggiungi il seguente codice al tuo file
server.jsper emettere i reindirizzamenti del servizio.app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME)); -
Registra il tuo endpoint protetto aggiungendo il seguente frammento di codice nel tuo file
app.js.app.get(‘/protected_resource’, passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res) {res.json(req.user); });
Per ulteriori informazioni, vedi App ID Node.js GitHub repository.
Configurazione dell'SDK Liberty for Java
Puoi configurare App ID per utilizzare le tue applicazioni web Liberty for Java.
Prima di iniziare
Devi avere i seguenti prerequisiti:
- Un'istanza del servizio App ID
- Una serie di credenziali del servizio
- Apache Maven 3.5 o superiore
- Java 1.8
- Un'applicazione web Liberty for Java
Provatelo voi stessi utilizzando una semplice applicazione di esempio Liberty for Java.
Installazione dell'SDK Liberty for Java
-
Aggiungi una funzione OpenID Connect al tuo
server.xml.<featureManager> <feature>ssl-1.0</feature> <feature>appSecurity-2.0</feature> <feature>openidConnectClient-1.0</feature> </featureManager> -
Ottieni le tue credenziali in uno di questi due modi.
-
Passando alla scheda Applications del dashboard App ID. Se non ne hai già una, puoi fare clic su Add application per crearne una nuova.
-
Effettuando una richiesta POST all'endpoint
/management/v4/<tenantID>/applications.Formato della richiesta:
curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -d '{"name": "ApplicationName"}'Risposta di esempio:
{ "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f", "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61", "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4", "name": "ApplicationName", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61" }
-
-
Crea una funzione Open ID Connect Client e definisci i seguenti segnaposto. Utilizza le credenziali del servizio per compilare i segnaposto.
<openidConnectClient clientId='App ID client_ID' clientSecret='App ID Secret' authorizationEndpointUrl='oauthServerUrl/authorization' tokenEndpointUrl='oauthServerUrl/token' jwkEndpointUrl='oauthServerUrl/publickeys' issuerIdentifier='Changed according to the region' tokenEndpointAuthMethod="basic" signatureAlgorithm="RS256" authFilterid="myAuthFilter" trustAliasName="ibm.com" >Variabili dell'elemento OIDC per le applicazioni Liberty for Java Componente Descrizione clientID
secret
oauth-server-urlCompleta il passo due per ottenere le tue credenziali del servizio. authorizationEndpointURLAggiungere /authorizationalla fine dioauthServerURL.tokenEndpointUrlAggiungere /tokenalla fine dioauthServerURL.jwkEndpointUrlAggiungere /publickeysalla fine dioauthServerURL.issuerIdentifierL'identificatore dell'emittente ha la seguente forma: <region>>.cloud.ibm.com. Ulteriori informazioni sulle regioni disponibili.tokenEndpointAuthMethodSpecificata come "basic". signatureAlgorithmSpecificata come "RS256". authFilteridL'elenco delle risorse da proteggere. trustAliasNameIl nome del tuo certificato nel tuo truststore.
Inizializzazione dell'SDK Liberty for Java
-
Nel tuo file
server.xml, definisci un filtro di autorizzazione per specificare le risorse protette. Se un filtro non è definito, il servizio protegge tutte le risorse.<authFilter id="myAuthFilter"> <requestUrl id="myRequestUrl" urlPattern="/protected_resource" matchType="contains"/> </authFilter> -
Definisci il tuo tipo di oggetto speciale come
ALL_AUTHENTICATED_USERS.<application type="war" id="ProtectedServlet" context-root="/appidSample" location="${server.config.dir}/apps/libertySample-1.0.0.war"> <application-bnd> <security-role name="myrole"> <special-subject type="ALL_AUTHENTICATED_USERS"/> </security-role> </application-bnd> </application> -
Scaricare il file
libertySample-1.0.0.warda GitHub e inserirlo nella cartella apps del server. Ad esempio, se il tuo server è denominatodefaultServer, il file war dovrebbe essere posizionato quitarget/liberty/wlp/usr/servers/defaultServer/apps/. -
Configura SSL aggiungendo quanto segue al tuo file
server.xml. Devi anche creare un truststore.<keyStore id="defaultKeyStore" password="myPassword"/> <keyStore id="appidtruststore" password="Liberty" location="${server.config.dir}/mytruststore.jks"/> <ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef="appidtruststore"/>
Per impostazione predefinita, la configurazione SSL richiede che il truststore sia configurato per OpenID Connect. Per saperne di più sulla configurazione di un client OpenID Connect in Liberty.
Configurazione dell'SDK Spring Boot for Java
Puoi configurare App ID per utilizzare le tue applicazioni Spring Boot.
Prima di iniziare
Devi avere i seguenti prerequisiti:
- Un'istanza del servizio App ID
- Una serie di credenziali del servizio
- Un progetto Java + Maven
- Apache Maven 3.5 o superiore
- Java 1.8
- Spring Boot 2.0 e Security OAuth 2.0 o superiore
Inizializzazione del framework Spring Boot
-
Aggiungete il seguente codice tra i tag
<project> </project>nel vostro file Mavenpom.xml.<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> </parent> -
Aggiungi le seguenti dipendenze al tuo file
pom.xmlMaven.<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>org.springframework.security.oauth.boot</groupId> <artifactId>spring-security-oauth2-autoconfigure</artifactId> <version>2.0.0.RELEASE</version> </dependency> </dependencies> -
Nello stesso file, includi il plugin Maven.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
Inizializzazione di OAuth2
-
Aggiungi le seguenti annotazioni al tuo file Java.
@SpringBootApplication @EnableOAuth2Sso -
Estendi la classe con
WebSecurityConfigurerAdapter. -
Sovrascrivi tutta la configurazione di sicurezza e registra il tuo endpoint protetto.
@Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/protected_Resource").authenticated() .and().logout().logoutSuccessUrl("/").permitAll(); }
Aggiunta di credenziali
-
Ottieni le tue credenziali in uno dei seguenti modi.
-
Passando alla scheda Applications del dashboard App ID. Se non ne hai già una, puoi fare clic su Add application per crearne una nuova.
-
Effettuando una richiesta POST all'endpoint
/management/v4/<tenantID>/applications.- Formato della richiesta:
curl -X POST \ https://us-south.appid.cloud.ibm.com/management/v4/39a37f57-a227-4bfe-a044-93b6e6060b61/applications/ \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer <IAMToken>' \ -d '{"name": "ApplicationName"}' - Risposta di esempio:
{ "clientId": "111c22c3-38ea-4de8-b5d4-338744d83b0f", "tenantId": "39a37f57-a227-4bfe-a044-93b6e6060b61", "secret": "ZmE5ZDQ5ODctMmA1ZS00OGRiLWExZDMtZTA1MjkyZTc4MDB4", "name": "ApplicationName", "oAuthServerUrl": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6060b61" }
- Formato della richiesta:
-
-
Aggiungi un file di configurazione
application.ymlalla directory/springbootsample/src/main/resources/. Puoi completare la tua configurazione con le informazioni dalle tue credenziali del servizio.security: oauth2: client: clientId: <clientID> clientSecret: <clientSecret> accessTokenUri: <oauthServerURL>/token userAuthorizationUri: <oauthServerURL>/authorization resource: userInfoUri: <oauthServerURL>/userinfo
Utilizzo di App ID con altri linguaggi
Con un SDK client conforme a OIDC, puoi utilizzare App ID con altri linguaggi. Per maggiori informazioni, consultate l'elenco delle biblioteche certificate.
Passi successivi
Con App ID installato nella tua applicazione, sei quasi pronto ad iniziare ad autenticare gli utenti. Prova ad eseguire una delle seguenti attività:
- Configura i tuoi provider di identità
- Personalizza e configura il widget di accesso
- Ulteriori informazioni sull'SDK Node.js