Red Hat Openshift Single Sign-On Secured N-tier application
Referência: https://github.com/mechevarria/ocp-sso.git
Este projeto contém scripts e códigos-fonte para implantar uma aplicação de 3 camadas utilizando o Red Hat Single Sign-On e protegendo-a com SSL.
A aplicação é distribuída em uma app frontend (tier 1) node.js + angular 6.x que realiza a chamada para uma app back-end REST (tier 2) springboot e uma app back-end REST (tier 2) JBoss EAP que irá persistir em uma instância de banco de dados (tier 3) postgresql.
A implantação do Red Hat Single Sign-On irá atuar na proteção deste cenário através de uma realm chamada java-js-realm. A realm irá conter clients configurados para o público que enxergam o frontend (js) e o back-end do tipo bearer only (eap). O objetivo deste cenário é simples e se trata apenas de garantir que um usuário válido está devidamente logado.
Todos os scripts que irão auxiliar o deployment das aplicações requerem que você já esteja devidamente autenticado utlizando o cli da instância do cluster openshift oc openshift
Exemplo: oc login -u developer
Deploy Red Hat Single Sign-On
Navegue para o diretório sso
e execute o script ocp-deploy-sso.sh
.
Uma vez finalizado a execução você irá visualizar os pods criados no projeto SSO N-tier.
Os dados para login do console administrativo do RH-SSO são admin/Redhat1!
OBS. Talvez seja necessário importar as imagens oficiais do Red Hat Single Sign-On caso não existam no registry do OCP. Para isso, execute o script ocp-install-templates.sh
que se encontra no diretório de instalação sso
.
Set the Public Key in the config map
Certifique-se que a instância do RH-SSO está ativa (running). Uma vez que a instância estiver UP você irá precisar modificar o config map utilizado pelo back-end do JBoss EAP para se comunicar com o Red Hat Single Sign-On.
-
Acesse o console administrativo do RH-SSO. As credenciais para acesso são admin/Redhat1!
-
No console administrativo do RH-SSO, navegue para a java-js-realm, na aba keys e selecione Public Key na chave RSA e guarde o valor gerado na popup em um bloco de notas para utilização futura.
-
Retorne para o console administrativo do Openshift.
No projeto SSO N-Tier, navegue para Resources e depois em Config Maps -
Edite o config-map ntier-config e copie o valor previamente copiado no bloco de notas para a entrada PUBLIC_KEY (previamente definido com o valor changeme)
Deploy JBoss EAP and Postgresql
Navegue para o diretório eap
e execute o script ocp-deploy-eap.sh
.
Este script irá criar a aplicação de back-end bearer-only que irá fazer uso do banco de dados PostgreSQL.
Deploy Spring Boot
Navegue para o diretório springboot
e execute o script ocp-deploy-springboot.sh
.
Este script irá criar a aplicação de back-end confidential que servirá as requisições da aplicação de front-end baseada em NodeJS/Angular.
Deploy node.js
Agora que as camadas tier-2 e tier-3 estão disponíveis, navegue para o diretório node
e execute o script ocp-deploy-node.sh
.
Este script irá criar a aplicação front-end public baseada em NodeJS que irá realizar a interface final com o usuário e será responsável pelo processo de login/logout integrado ao RH-SSO.
Configure Clients
Agora que todas as aplicações estão em execução (running), é hora de configurar as aplicações no console administrativo do RH-SSO.
Efetue o acesso ao console administrativo do RH-SSO.
Lembre-se de utilizar as credenciais admin/Redhat1!
JS Client (front-end)
- Acesse a realm java-js-realm, selecione o item de menu clients, e acione o botão create
- Informe o valor js no campo Client ID, e clique em save
- Informe em Valid Redirect URIs a rota que o Openshift criou para a aplicação NodeJS e informe também a URI **/***. Exemplo:
https://nodejs-app-ntier.192.168.42.90.nip.io/*
e/*
- Informe o valor
*
em Web Origins (Access-Control-Allow-Origin: *). Maiores detalhes sobre CORS poderão ser vistos em CORS - Selecione a opção save
Java Client (back-end bearer-only)
- Acesse a realm java-js-realm, selecione o item de menu clients, e acione o botão create
- Informe o valor java no campo Client ID, e clique em save
- Informe a opção bearer-only para o campo Access Type
- Selecione a opção save
Create User
- Acesse a realm java-js-realm, selecione o item de menu Users, e acione o botão Add User
- Preencha os campos Username, Email, First Name and Last Name
- Selecione a opção save
- Ainda na página do usuário recém-criado, navegue para a aba Credentials, e informe uma nova senha nos campos New Password e Password Confirmation
- Defina a opção temporary para off
- Selecione a opção Reset Password
- Confirme a operação acionando o botão vermelho Change the password
Test!
Agora que toda a parte de configuração foi realizada, acesse a rota da aplicação node-js e se tudo estiver de acordo, você será redirecionado para a página de login provida pela integração da aplicação NodeJS/Angular com o RH-SSO.
Informe o usuário e senha previamente criados.
Ao acessar a aplicação, você será capaz de visualizar os atributos do usuário recém logado no item de menu Profile.
Utilizando os itens de menu Status e Cars você será capaz de realizar chamadas para a aplicação JBoss EAP back-end REST.