Apps da web

Ao desenvolver um aplicativo da web, é possível usar o fluxo da web do IBM Cloud® App ID paraautenticar os usuários com segurança. Os usuários podem, então, acessar o conteúdo protegido do lado doservidor em seus apps da web.

Entendendo o fluxo

Os aplicativos da web geralmente requerem que os usuários se autentiquem para acessar o conteúdo protegido. O App ID usa o fluxo de código de autorização do OIDC para autenticar os usuários de forma segura. Com esse fluxo, quando o usuário é autenticado, o aplicativo recebe um código de autorização. Em seguida, ocódigo é trocado por um token de acesso, de identidade e de atualização. Na etapa de troca de código, os tokens são sempre enviados por meio de um canal de retorno seguro entre o aplicativo e o servidor do OIDC. Esse processo oferece outra camada de segurança, pois o invasor não consegue interceptar os tokens. Esses tokens podem ser enviados diretamente para oaplicativo de hospedagem do servidor da web para autenticação do usuário.

Fluxo de solicitação do aplicativo Web
Fluxo de solicitação do aplicativo Web

  1. Um usuário inicia o fluxo de autorização enviando uma solicitação para o terminal /authorization pormeio do SDK ou API do App ID.

  2. Se o usuário estiver desautorizado, o fluxo de autenticação será iniciado com um redirecionamento para o App ID.

  3. Dependendo dos parâmetros de solicitação /authorization do usuário ou configuração do provedor de identidade, ele inicia o Widget de login no navegador do usuário.

  4. O usuário escolhe um provedor de identidade para se autenticar e conclui o processo de conexão.

  5. O provedor de identidade é redirecionado para o aplicativo cliente com o código de autorização.

  6. O SDK do App ID troca o código de autorização para os tokens de acesso,de identidade e, opcionalmente, de atualização por meio do serviço do App ID.

  7. Os tokens são salvos pelo SDK do App ID e ocorre um redirecionamento para oaplicativo cliente.

  8. O usuário tem acesso concedido ao aplicativo.

Configurando o SDK do Node.js

É possível configurar o App ID para trabalhar com os apps da webNode.js.

Antes de Iniciar

Deve-se ter os pré-requisitos a seguir:

  • Uma instância do serviço do App ID
  • Um conjunto de credenciais de serviço
  • NPM versão 4 ou superior
  • Node versão 6 ou superior
  • Seu URI de redirecionamento configurado no painel de serviço do App ID

Experimente você mesmo usando um simples aplicativo de amostra Node.

Instalando o SDK do Node.js

  1. Usando a linha de comandos, mude para o diretório que contém o aplicativo Node.js.

  2. Instale o serviço do App ID .

    npm install --save ibmcloud-appid
    

Inicializando o SDK do Node.js

  1. Inclua as definições require no arquivo server.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";
    
  2. Configurar seu app express para usar o middleware express-session.

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

    Você deve configurar o middleware com o armazenamento de sessão adequado para ambientes de produção. Para obter mais informações, consulte a seção express.js.

  3. Obtenha as suas credenciais de uma das maneiras a seguir.

    • Navegando para a guia Aplicativos do painel do App ID. Se você não tiver um aplicativo na lista, será possível clicar em Incluir aplicativo para criar um.

    • Ao fazer uma solicitação POST para o terminal /management/v4/<tenantId>/applications.

      Formato da solicitação:

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

      Resposta de exemplo:

      {
      "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. Opcional: decida como formatar seu URI de redirecionamento. O redirecionamento pode ser formatado de duas maneiras diferentes. Se nenhuma das opções a seguir for fornecida, o SDK App ID tentará recuperar o application_uri do aplicativo que está sendo executado no IBM Cloud e anexar um sufixo padrão /ibm/cloud/appid/callback.

    • Manualmente em um novo WebAppStrategy({redirectUri: "...."})
    • Como uma variável de ambiente denominada redirectUri
  5. Usando as informações obtidas nas etapas anteriores, inicialize o SDK.

    passport.use(new WebAppStrategy({
    tenantId: "<tenantID>",
    clientId: "<clientID>",
    secret: "<secret>",
    oauthServerUrl: "<oauthServerURL>",
    redirectUri: "<appURL>" + CALLBACK_URL
    }));
    
  6. Configure o passaporte com serialização e desserialização. Essa etapa de configuração é necessária para a persistência de sessão autenticada nas solicitações de HTTP. Para obter mais informações, consulte os documentos do passaporte.

    passport.serializeUser(function(user, cb) {
       cb(null, user);
       });
    passport.deserializeUser(function(obj, cb) {
       cb(null, obj);
       });
    
  7. Inclua o código a seguir em seu arquivo server.js para emitir os redirecionamentos de serviço.

    app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME));
    
  8. Registre o seu terminal protegido incluindo o fragmento de código a seguir em seu arquivo app.js.

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

Para obter mais informações, consulte o App ID Node.js GitHub.

Configurando o SDK do Liberty for Java

É possível configurar o App ID para trabalhar com os apps da web Liberty for Java.

Antes de Iniciar

Deve-se ter os pré-requisitos a seguir:

  • Uma instância do serviço do App ID
  • Um conjunto de credenciais de serviço
  • Apache Maven 3.5 ou superior
  • Java 1.8
  • Um aplicativo da web Liberty for Java

Experimente você mesmo usando um simples aplicativo de amostra Liberty for Java.

Instalando o SDK do Liberty for Java

  1. Inclua um recurso de conexão OpenID em seu server.xml.

    <featureManager>
       <feature>ssl-1.0</feature>
       <feature>appSecurity-2.0</feature>
       <feature>openidConnectClient-1.0</feature>
    </featureManager>
    
  2. Obtenha suas credenciais de uma de duas maneiras.

    • Navegando para a guia Aplicativos do painel do App ID. Se você ainda não tiver um, será possível clicar em Incluir aplicativo para criar um novo.

    • Ao fazer uma solicitação POST para o terminal /management/v4/<tenantID>/applications.

      Formato da solicitação:

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

      Resposta de exemplo:

      {
      "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. Crie um recurso cliente da conexão OpenID e defina os itens temporários a seguir. Use as credenciais de serviço parapreencher os itens temporários.

    <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"
    >
    
    Variáveis do elemento OIDC para os aplicativos Liberty for Java
    Componente Descrição
    clientID
    secret
    oauth-server-url
    Conclua a etapa dois para obter suas credenciais de serviço.
    authorizationEndpointURL Inclua /authorization no final de seu oauthServerURL.
    tokenEndpointUrl Inclua /token no final de seu oauthServerURL.
    jwkEndpointUrl Inclua /publickeys no final de seu oauthServerURL.
    issuerIdentifier O identificador do emissor obtém o seguinte formato: &lt;region>&gt;.cloud.ibm.com. Saiba mais sobre as regiões disponíveis.
    tokenEndpointAuthMethod Especificado como "basic".
    signatureAlgorithm Especificado como "RS256".
    authFilterid A lista dos recursos a serem protegidos.
    trustAliasName O nome de seu certificado em seu armazenamento confiável.

Inicializando o SDK do Liberty for Java

  1. Em seu arquivo server.xml, defina um filtro de autorização para especificar os recursosprotegidos. Se um filtro não for definido, o serviço protegerá todos os recursos.

    <authFilter id="myAuthFilter">
       <requestUrl id="myRequestUrl" urlPattern="/protected_resource" matchType="contains"/>
    </authFilter>
    
  2. Defina seu tipo de assunto especial como 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. Faça o download do arquivo libertySample-1.0.0.war em GitHub e coloque-o na pasta de aplicativos do seu servidor. Por exemplo, se o seu servidor for denominado defaultServer, o arquivo war deverá ficar aqui target/liberty/wlp/usr/servers/defaultServer/apps/.

  4. Configure o SSL incluindo o seguinte em seu arquivo server.xml. Também é necessário criar um armazenamento confiável.

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

Por padrão, a configuração do SSL requer que o armazenamento confiável seja configurado para a conexão OpenID. Saiba mais sobre como configurar um cliente OpenID Connect no Liberty.

Configurando o SDK do Spring Boot for Java

É possível configurar o App ID para trabalhar com seus aplicativos SpringBoot.

Antes de Iniciar

Deve-se ter os pré-requisitos a seguir:

  • Uma instância do serviço do App ID
  • Um conjunto de credenciais de serviço
  • Um projeto Java + Maven
  • Apache Maven 3.5 ou superior
  • Java 1.8
  • Spring Boot 2.0 e Security OAuth 2.0 ou mais recente

Inicializando a estrutura da Boot Spring

  1. Adicione o seguinte código entre as tags <project> </project> em seu arquivo Maven pom.xml.

    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>2.0.2.RELEASE</version>
       <relativePath/>
    </parent>
    
  2. Inclua as dependências a seguir em seu arquivo pom.xml do Maven.

    <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. No mesmo arquivo, inclua o plug-in Maven.

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

Inicializando o OAuth2

  1. Inclua as anotações a seguir em seu arquivo Java.

    @SpringBootApplication
    @EnableOAuth2Sso
    
  2. Estenda a classe com WebSecurityConfigurerAdapter.

  3. Substitua qualquer configuração de segurança e registre seu terminal protegido.

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

Incluindo credenciais

  1. Obtenha as suas credenciais de uma das maneiras a seguir.

    • Navegando para a guia Aplicativos do painel do App ID. Se você ainda não tiver um, será possível clicar em Incluir aplicativo para criar um novo.

    • Ao fazer uma solicitação POST para o terminal /management/v4/<tenantID>/applications.

      • Formato da solicitação:
        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"}'
        
      • Resposta de exemplo:
        {
        "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. Inclua um arquivo de configuração application.yml no diretório /springbootsample/src/main/resources/. É possível concluir sua configuração com as informações de suas credenciais de serviço.

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

Usando o App ID com outros idiomas

Com um SDK de cliente compatível com OIDC, é possível usar o App IDcom outros idiomas. Confira a lista de bibliotecas certificadas para obter mais informações.

Próximas etapas

Com o App ID instalado em seu aplicativo, você está quase pronto para começar a autenticar os usuários! Tente executar uma das atividades a seguir em seguida: