Web-Apps

Wenn Sie eine Webanwendung entwickeln, können Sie den IBM Cloud® App ID-Webablauf verwenden, um Benutzer sicher zu authentifizieren. Benutzer sind dann in der Lage, auf Ihre geschützten serverseitigen Inhalte in Ihren Web-Apps zuzugreifen.

Informationen zum Ablauf

Web-Apps erfordern häufig die Authentifizierung von Benutzern, um auf geschützte Inhalte zuzugreifen. App ID verwendet den OIDC-Berechtigungscodeablauf für die sichere Authentifizierung von Benutzern. Wenn der Benutzer authentifiziert wurde, erhält die App durch diesen Ablauf einen Autorisierungscode. Der Code wird dann gegen ein Zugriffs-, Identitäts- und Aktualisierungstoken getauscht. Im Code werden die Token im Austauschschritt immer über einen sicheren Rückkanal zwischen der App und dem OIDC-Server gesendet. Dieses Verfahren bietet eine weitere Sicherheitsebene, da der Angreifer nicht in der Lage ist, die Token abzufangen. Diese Token können zur Benutzerauthentifizierung direkt an die Web-Server-Hosting-Anwendung gesendet werden.

Web-App-Anfrageablauf
Web-App-Anfrageablauf

  1. Ein Benutzer leitet den Autorisierungsablauf ein, indem er eine Anforderung über das App ID-SDK oder die API an den Endpunkt /authorization sendet.

  2. Wenn der Benutzer nicht berechtigt ist, wird der Authentifizierungsablauf mit einer Weiterleitung an App ID gestartet.

  3. Abhängig von den /authorization-Anforderungsparametern des Benutzers oder der Konfiguration des Identitätsproviders wird das Anmeldewidget im Benutzerbrowser gestartet.

  4. Der Benutzer wählt einen Identitätsprovider für die Authentifizierung aus und führt den Anmeldeprozess durch.

  5. Der Identitätsprovider leitet die Client-App mit dem Autorisierungscode um.

  6. Das App ID-SDK tauscht den Autorisierungscode für Zugriffs-, Identitäts- und optionale Aktualisierungstoken vom App ID-Service aus.

  7. Die Token werden durch das App ID-SDK gespeichert und es erfolgt eine Weiterleitung an die Clientanwendung.

  8. Dem Benutzer wird der Zugriff auf die App gewährt.

Node.js-SDK konfigurieren

Sie können App ID für die kombinierte Verwendung mit Ihren Node.js-Webanwendungen konfigurieren.

Vorbereitende Schritte

Folgendes wird vorausgesetzt:

  • Eine Instanz des App ID-Service
  • Die erforderlichen Serviceberechtigungsnachweise
  • NPM Version 4 oder höher
  • Node Version 6 oder höher
  • Ihr Weiterleitungs-URI im App ID-Service-Dashboard

Probieren Sie es selbst aus, indem Sie eine einfache Node Beispielanwendung verwenden.

Node.js-SDK installieren

  1. Wechseln Sie über die Befehlszeile in das Verzeichnis, das die Node.js-App enthält.

  2. Installieren Sie den App ID-Service.

    npm install --save ibmcloud-appid
    

Node.js-SDK initialisieren

  1. Fügen Sie die folgenden require-Definitionen zur Datei server.js hinzu.

    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";
    
  2. Richten Sie Ihre Express-App für die Verwendung von express-session-Middleware ein.

    const app = express();
    app.use(session({
       secret: "123456",
       resave: true,
       saveUninitialized: true
    }));
    app.use(passport.initialize());
    app.use(passport.session());
    

    Sie müssen die Middleware mit dem passenden Sitzungsspeicher für die Produktionsumgebungen konfigurieren. Weitere Informationen finden Sie in der express.js.

  3. Fordern Sie Ihre Berechtigungsnachweise auf eine der folgenden Arten an.

    • Navigieren Sie zur Registerkarte Anwendungen des App ID-Dashboards. Wenn keine Anwendung aufgelistet wird, dann können Sie auf Anwendung hinzufügen klicken, um eine Anwendung zu erstellen.

    • Durch eine POST-Anforderung an den /management/v4/<tenantId>/applications-Endpunkt.

      Anforderungsformat:

      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"}'
      

      Beispielantwort:

      {
      "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"
      }
      
  4. Optional: Legen Sie fest, wie Ihr Weiterleitungs-URI formatiert werden soll. Die Weiterleitung kann auf zwei verschiedene Arten formatiert werden. Wenn keine der folgenden Optionen angegeben wird, versucht das App ID SDK, die application_uri der App, die auf IBM Cloud läuft, abzurufen und ein Standardsuffix /ibm/cloud/appid/callback anzuhängen.

    • Manuell in einem neuen Element WebAppStrategy({redirectUri: "...."}).
    • Als Umgebungsvariable mit dem Namen redirectUri.
  5. Initialisieren Sie das SDK und verwenden Sie dazu die im vorherigen Schritt abgerufenen Informationen.

    passport.use(new WebAppStrategy({
    tenantId: "<tenantID>",
    clientId: "<clientID>",
    secret: "<secret>",
    oauthServerUrl: "<oauthServerURL>",
    redirectUri: "<appURL>" + CALLBACK_URL
    }));
    
  6. Konfigurieren Sie Passport mit Serialisierung und Deserialisierung. Dieser Konfigurationsschritt ist für eine authentifizierte Sitzungspersistenz über HTTP-Anforderungen hinweg erforderlich. Weitere Informationen finden Sie in den Dokumenten zum Reisepass.

    passport.serializeUser(function(user, cb) {
       cb(null, user);
       });
    passport.deserializeUser(function(obj, cb) {
       cb(null, obj);
       });
    
  7. Fügen Sie den nachfolgend dargestellten Code in der Datei server.js hinzu, um die Serviceweiterleitungen auszuführen.

    app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME));
    
  8. Registrieren Sie Ihren geschützten Endpunkt, indem Sie Ihrer Datei app.js das folgende Code-Snippet hinzufügen.

    app.get(‘/protected_resource’, passport.authenticate(WebAppStrategy.STRATEGY_NAME), function(req, res) {res.json(req.user); });
    

Weitere Informationen finden Sie im App ID Node.js GitHub-Repository.

Liberty for Java-SDK konfigurieren

Sie können App ID für eine Verwendung Ihrer Liberty for Java-Webanwendungen konfigurieren.

Vorbereitende Schritte

Folgendes wird vorausgesetzt:

  • Eine Instanz des App ID-Service
  • Die erforderlichen Serviceberechtigungsnachweise
  • Apache Maven 3.5 oder höher
  • Java 1.8
  • Eine Liberty for Java-Webanwendung

Probieren Sie es selbst aus, indem Sie eine einfache Liberty for Java Beispielanwendung verwenden.

Liberty for Java-SDK installieren

  1. Fügen Sie ein OpenID Connect-Feature in Ihrer Datei server.xml hinzu.

    <featureManager>
       <feature>ssl-1.0</feature>
       <feature>appSecurity-2.0</feature>
       <feature>openidConnectClient-1.0</feature>
    </featureManager>
    
  2. Fordern Sie Ihre Berechtigungsnachweise auf eine der beiden folgenden Arten an.

    • Navigieren Sie zur Registerkarte Anwendungen des App ID-Dashboards. Wenn Sie noch nicht über eine Anwendung verfügen, dann können Sie auf Anwendung hinzufügen klicken, um eine neue Anwendung zu erstellen.

    • Durch eine POST-Anforderung an den /management/v4/<tenantID>/applications-Endpunkt.

      Anforderungsformat:

      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"}'
      

      Beispielantwort:

      {
      "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"
      }
      
  3. Erstellen Sie ein Open ID Connect-Client-Feature und definieren Sie die folgenden Platzhalter. Verwenden Sie die Serviceberechtigungsnachweise, um die Platzhalter zu füllen.

    <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"
    >
    
    OIDC-Elementvariablen für Liberty for Java-Apps
    Komponente Beschreibung
    clientID
    secret
    oauth-server-url
    Führen Sie Schritt 2 aus, um Ihre Serviceberechtigungsnachweise abzurufen.
    authorizationEndpointURL Fügen Sie /authorization am Ende Ihrer oauthServerURLhinzu.
    tokenEndpointUrl Fügen Sie /token am Ende Ihrer oauthServerURLhinzu.
    jwkEndpointUrl Fügen Sie /publickeys am Ende Ihrer oauthServerURLhinzu.
    issuerIdentifier Die Aussteller-ID hat folgendes Format: &lt;region>&gt;.cloud.ibm.com. Weitere Informationen zu den verfügbaren Regionen.
    tokenEndpointAuthMethod Als "Basic" angegeben.
    signatureAlgorithm Als "RS256" angegeben.
    authFilterid Liste der zu schützenden Ressourcen.
    trustAliasName Name des Zertifikats im Truststore.

Liberty for Java-SDK initialisieren

  1. Definieren Sie in der Datei server.xml einen Autorisierungsfilter für die Angabe geschützter Ressourcen. Wenn kein Filter definiert ist, schützt der Dienst alle Ressourcen.

    <authFilter id="myAuthFilter">
       <requestUrl id="myRequestUrl" urlPattern="/protected_resource" matchType="contains"/>
    </authFilter>
    
  2. Definieren Sie Ihren speziellen Subjekttyp als 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>
    
  3. Laden Sie die Datei libertySample-1.0.0.war von GitHub herunter und legen Sie sie in den Ordner apps Ihres Servers. Wenn Ihr Server beispielsweise den Namen defaultServer trägt, wird die WAR-Datei unter target/liberty/wlp/usr/servers/defaultServer/apps/ abgelegt.

  4. Konfigurieren Sie SSL, indem Sie der Datei server.xml folgenden Code hinzufügen. Sie müssen auch einen Truststore erstellen.

       <keyStore id="defaultKeyStore" password="myPassword"/>
       <keyStore id="appidtruststore" password="Liberty" location="${server.config.dir}/mytruststore.jks"/>
       <ssl id="defaultSSLConfig" keyStoreRef="defaultKeyStore" trustStoreRef="appidtruststore"/>
    

Für die SSL-Standardkonfiguration muss der Truststore für OpenID Connect konfiguriert sein. Erfahren Sie mehr über die Konfiguration eines OpenID Connect Client in Liberty.

Spring Boot for Java-SDK konfigurieren

Sie können App ID für eine Verwendung Ihrer Spring Boot-Webanwendungen konfigurieren.

Vorbereitende Schritte

Folgendes wird vorausgesetzt:

  • Eine Instanz des App ID-Service
  • Die erforderlichen Serviceberechtigungsnachweise
  • Ein Java + Maven-Projekt
  • Apache Maven 3.5 oder höher
  • Java 1.8
  • Spring Boot 2.0 und Security OAuth 2.0 oder höher

Spring Boot-Framework initialisieren

  1. Fügen Sie den folgenden Code zwischen den <project> </project> Tags in Ihrer Maven pom.xml Datei ein.

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.2.RELEASE</version>
       <relativePath/>
    </parent>
    
  2. Fügen Sie die folgenden Abhängigkeiten zu Ihrer Maven-Datei pom.xml hinzu.

    <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>
    
  3. Fügen Sie das Maven-Plug-in in dieselbe Datei ein.

    <plugin>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    

OAuth2 initialisieren

  1. Fügen Sie die folgenden Annotationen zur Java-Datei hinzu.

    @SpringBootApplication
    @EnableOAuth2Sso
    
  2. Erweitern Sie die Klasse mit WebSecurityConfigurerAdapter.

  3. Überschreiben Sie alle Sicherheitskonfigurationen und registrieren Sie Ihren geschützten Endpunkt.

       @Override
       protected void configure(HttpSecurity http) throws Exception {
          http.authorizeRequests()
                   .antMatchers("/protected_Resource").authenticated()
                   .and().logout().logoutSuccessUrl("/").permitAll();
       }
    

Berechtigungsnachweise hinzufügen

  1. Fordern Sie Ihre Berechtigungsnachweise auf eine der folgenden Arten an.

    • Navigieren Sie zur Registerkarte Anwendungen des App ID-Dashboards. Wenn Sie noch nicht über eine Anwendung verfügen, dann können Sie auf Anwendung hinzufügen klicken, um eine neue Anwendung zu erstellen.

    • Durch eine POST-Anforderung an den /management/v4/<tenantID>/applications-Endpunkt.

      • Anforderungsformat:
        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"}'
        
      • Beispielantwort:
        {
        "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"
        }
        
  2. Fügen Sie eine Konfigurationsdatei application.yml zum Verzeichnis /springbootsample/src/main/resources/ hinzu. Sie können für die Konfiguration die Informationen aus Ihren Serviceberechtigungsnachweisen angeben.

    security:
    oauth2:
       client:
       clientId: <clientID>
       clientSecret: <clientSecret>
       accessTokenUri: <oauthServerURL>/token
       userAuthorizationUri: <oauthServerURL>/authorization
       resource:
       userInfoUri: <oauthServerURL>/userinfo
    

App ID mit anderen Sprachen verwenden

Mit einem OIDC-konformen Client-SDK können Sie App ID mit anderen Sprachen verwenden. Weitere Informationen finden Sie in der Liste der zertifizierten Bibliotheken.

Nächste Schritte

Wenn App ID in Ihrer Anwendung installiert ist, sind Sie fast bereit, Benutzer zu authentifizieren. Versuchen Sie als Nächstes, eine der folgenden Aktivitäten auszuführen: