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.
-
Um usuário inicia o fluxo de autorização enviando uma solicitação para o terminal
/authorizationpormeio do SDK ou API do App ID. -
Se o usuário estiver desautorizado, o fluxo de autenticação será iniciado com um redirecionamento para o App ID.
-
Dependendo dos parâmetros de solicitação
/authorizationdo usuário ou configuração do provedor de identidade, ele inicia o Widget de login no navegador do usuário. -
O usuário escolhe um provedor de identidade para se autenticar e conclui o processo de conexão.
-
O provedor de identidade é redirecionado para o aplicativo cliente com o código de autorização.
-
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.
-
Os tokens são salvos pelo SDK do App ID e ocorre um redirecionamento para oaplicativo cliente.
-
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
-
Usando a linha de comandos, mude para o diretório que contém o aplicativo Node.js.
-
Instale o serviço do App ID .
npm install --save ibmcloud-appid
Inicializando o SDK do Node.js
-
Inclua as definições
requireno arquivoserver.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"; -
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.
-
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" }
-
-
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_urido 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
- Manualmente em um novo
-
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 })); -
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); }); -
Inclua o código a seguir em seu arquivo
server.jspara emitir os redirecionamentos de serviço.app.get(CALLBACK_URL, passport.authenticate(WebAppStrategy.STRATEGY_NAME)); -
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
-
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> -
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" }
-
-
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-urlConclua a etapa dois para obter suas credenciais de serviço. authorizationEndpointURLInclua /authorizationno final de seuoauthServerURL.tokenEndpointUrlInclua /tokenno final de seuoauthServerURL.jwkEndpointUrlInclua /publickeysno final de seuoauthServerURL.issuerIdentifierO identificador do emissor obtém o seguinte formato: <region>>.cloud.ibm.com. Saiba mais sobre as regiões disponíveis.tokenEndpointAuthMethodEspecificado como "basic". signatureAlgorithmEspecificado como "RS256". authFilteridA lista dos recursos a serem protegidos. trustAliasNameO nome de seu certificado em seu armazenamento confiável.
Inicializando o SDK do Liberty for Java
-
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> -
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> -
Faça o download do arquivo
libertySample-1.0.0.warem GitHub e coloque-o na pasta de aplicativos do seu servidor. Por exemplo, se o seu servidor for denominadodefaultServer, o arquivo war deverá ficar aquitarget/liberty/wlp/usr/servers/defaultServer/apps/. -
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
-
Adicione o seguinte código entre as tags
<project> </project>em seu arquivo Mavenpom.xml.<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.2.RELEASE</version> <relativePath/> </parent> -
Inclua as dependências a seguir em seu arquivo
pom.xmldo 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> -
No mesmo arquivo, inclua o plug-in Maven.
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin>
Inicializando o OAuth2
-
Inclua as anotações a seguir em seu arquivo Java.
@SpringBootApplication @EnableOAuth2Sso -
Estenda a classe com
WebSecurityConfigurerAdapter. -
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
-
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" }
- Formato da solicitação:
-
-
Inclua um arquivo de configuração
application.ymlno 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:
- Configure os seus provedores de identidade
- Customize e configure o Widget de login
- Saiba mais sobre o Node.js SDK