infotic:projetos:mockcas
no way to compare when less than two revisions
Diferenças
Aqui você vê as diferenças entre duas revisões dessa página.
— | infotic:projetos:mockcas [27/04/2021 12:05] (atual) – criada - edição externa 127.0.0.1 | ||
---|---|---|---|
Linha 1: | Linha 1: | ||
+ | ====== Tutorial para simular localmente o SSO CASino utilizando Docker ====== | ||
+ | |||
+ | Este tutorial tem por objetivo criar um servidor local que responda de forma semelhante ao | ||
+ | servidores CAS disponíveis em ambiente externo, mas possa ser configurado localmente. | ||
+ | |||
+ | Será abordada a construção da imagem na plataforma docker, sua execução e a | ||
+ | configuração dos logins no SSO. | ||
+ | |||
+ | É necessário ter algum conhecimento prévio sobre docker e ciência de quais campos que | ||
+ | virão das contas do SSO. | ||
+ | |||
+ | ===== 1. Construção da imagem docker ===== | ||
+ | |||
+ | Os arquivos para a construção da imagem estão disponíveis no git. | ||
+ | |||
+ | Criaremos a imagem no docker e levantaremos o container com a imagem. | ||
+ | |||
+ | |||
+ | ==== 1.1. Baixar os arquivos disponíveis ==== | ||
+ | |||
+ | < | ||
+ | $ git clone https:// | ||
+ | </ | ||
+ | |||
+ | ^ Descrição dos Arquivos ^^ | ||
+ | |\Dockerfile | Receita para a geração da imagem com Ruby 2.3 Foi utilizado como base em um projeto((https:// | ||
+ | |\Gemfile | Descreve as dependências para o programa em Ruby | | ||
+ | |\cas.yml | Configuração de autenticadores e logins do programa | | ||
+ | |\database.yml | Utilizado durante a instalação | | ||
+ | |\certificate_authority-password_1234-privateKey.key | Chave privada da ' | ||
+ | |\certificate_authority-help.txt | Informações sobre a criação da ' | ||
+ | |\certificate_authority-rootCertificate.pem | Certificado da ' | ||
+ | |\certificate_authority-rootCertificate.srl | Arquivo com o serial criado (-CAcreateserial ) | | ||
+ | |\casino.key | Private Key - Chave privada para o serviço | | ||
+ | |\casino.csr | Certificate Signing Request | | ||
+ | |\casino.ext | Extra - Dados para geração do certificado do serviço pela autoridade certificadora | | ||
+ | |\docker-entrypoint.sh | Shell Script para gerar o certificado do serviço durante inicialização do container, alterando a linha IP.1 de acordo com o IP da máquina | | ||
+ | | | | | ||
+ | |||
+ | Há como substituir os arquivos ou diretórios através da montagem de volumes quando for | ||
+ | levantar o container mais à frente. | ||
+ | |||
+ | O certificado SSL será gerado durante a inicialização do container. | ||
+ | |||
+ | ==== 1.2. Construindo a imagem no docker ==== | ||
+ | |||
+ | < | ||
+ | $ sudo docker image build --tag=mock-casino-image mock-casino | ||
+ | </ | ||
+ | |||
+ | Obs: Favor reportar quaisquer problemas na geração da imagem. | ||
+ | ==== 1.3. Levantando o container utilizando a imagem criada ==== | ||
+ | |||
+ | Ao levantar o container, é possível vincular os arquivos internos a arquivos externos | ||
+ | informando como volume. | ||
+ | |||
+ | Podemos vincular um arquivo de configuração ‘**cas.yml**’ externo para aquele que se encontra dentro do container em **/ | ||
+ | |||
+ | Para configurar esse arquivo externo, veja a seção [[mockcas# | ||
+ | |||
+ | Abaixo, assumirei que o arquivo externo existe em: / | ||
+ | |||
+ | Através da linha de comando do docker((https:// | ||
+ | |||
+ | < | ||
+ | $ sudo docker container run | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | </ | ||
+ | ==== 1.4. Testando o CAS ==== | ||
+ | |||
+ | Entre no seu browser, através do endereço '' | ||
+ | |||
+ | Se estiver correto irá aparecer a tela a seguir. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== 2. Configurando logins no CASino ===== | ||
+ | |||
+ | O arquivo de configuração do SSO CASino((http:// | ||
+ | utilizado como padrão de serialização em Ruby. | ||
+ | |||
+ | Para termos o arquivo modificado, altere ou copie o cas.yml baixado . | ||
+ | |||
+ | Nesse arquivo, iremos alterar a coleção ‘users’ onde a chave é o login e abaixo ficam os | ||
+ | campos de cada usuário. **As partes exibidas abaixo são apenas um trecho do arquivo completo.** | ||
+ | |||
+ | <code yaml> | ||
+ | development: | ||
+ | <<: *defaults | ||
+ | authenticators: | ||
+ | static: | ||
+ | class: " | ||
+ | options: | ||
+ | users: | ||
+ | " | ||
+ | nome: " | ||
+ | password: " | ||
+ | email: " | ||
+ | outro-campo: | ||
+ | " | ||
+ | nome: " | ||
+ | password: " | ||
+ | email: " | ||
+ | outro-campo: | ||
+ | </ | ||
+ | |||
+ | Modifique os campos do usuário na lista ' | ||
+ | |||
+ | O único campo obrigatório é o password, que serve para autenticar e não retorna na resposta. | ||
+ | |||
+ | <code yaml> | ||
+ | users: | ||
+ | " | ||
+ | nome: " | ||
+ | password: " | ||
+ | email: " | ||
+ | IdentificacaoUFRJ: | ||
+ | matricula_siape: | ||
+ | registro_sira: | ||
+ | grupos: " | ||
+ | eh_tec_admin: | ||
+ | eh_aluno_grad: | ||
+ | eh_aluno_pos: | ||
+ | eh_professor: | ||
+ | ativo: " | ||
+ | </ | ||
+ | |||
+ | É necessário reiniciar o SSO CASino para que as mudanças tenham efeito. | ||
+ | |||
+ | **Obs**: | ||
+ | Para quem usa o CAS para autenticação e pega o perfil de usuário que vem de lá, a melhor maneira é pegar pelo atributo " | ||
+ | Os atributos " | ||
+ | |||
+ | ===== 3. Testes no ambiente com Laravel Dusk ===== | ||
+ | |||
+ | Após as instalações do [[mockcas# | ||
+ | |||
+ | Nosso **.env.dusk** terá pelo menos as seguintes linhas | ||
+ | |||
+ | <code ini> | ||
+ | # utilizo essa variável no script | ||
+ | CHROMEDRIVER=http:// | ||
+ | ROOT_USERNAME=12345678912 | ||
+ | ROOT_PASSWORD=123 | ||
+ | |||
+ | # abaixo seguem as utilizadas no projeto (.env) | ||
+ | APP_ENV=dusk | ||
+ | APP_DEBUG=true | ||
+ | APP_URL=http:// | ||
+ | |||
+ | CAS_HOST=172.18.0.30 | ||
+ | CAS_CONTEXT="" | ||
+ | CAS_PROXY=true | ||
+ | </ | ||
+ | |||
+ | Para esta classe de teste,vamos sobrescrever criar os métodos driver/ | ||
+ | |||
+ | <code php> | ||
+ | ... | ||
+ | use Facebook\WebDriver\WebDriverBy; | ||
+ | use Facebook\WebDriver\Chrome\ChromeOptions; | ||
+ | use Facebook\WebDriver\Remote\DesiredCapabilities; | ||
+ | use Facebook\WebDriver\Remote\RemoteWebDriver; | ||
+ | . | ||
+ | . | ||
+ | . | ||
+ | protected function driver() | ||
+ | { | ||
+ | $options = new ChromeOptions(); | ||
+ | $options-> | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | ' | ||
+ | // ' | ||
+ | ]); | ||
+ | $options-> | ||
+ | ' | ||
+ | [' | ||
+ | ); | ||
+ | return RemoteWebDriver:: | ||
+ | env(' | ||
+ | DesiredCapabilities:: | ||
+ | ); | ||
+ | } | ||
+ | public static function prepare() | ||
+ | { | ||
+ | static:: | ||
+ | } | ||
+ | protected function setUp() | ||
+ | { | ||
+ | $this-> | ||
+ | $browser-> | ||
+ | # Fig: 1 | ||
+ | // $browser-> | ||
+ | // $browser-> | ||
+ | // $browser-> | ||
+ | $browser-> | ||
+ | sleep(1); | ||
+ | // | ||
+ | { // parte da rotina para fechar a DEBUGBAR | ||
+ | $buttonDebugBares = $browser-> | ||
+ | WebDriverBy:: | ||
+ | ); | ||
+ | foreach ($buttonDebugBares as $buttonDebugBar) { | ||
+ | if ($buttonDebugBar-> | ||
+ | } | ||
+ | if (count($buttonDebugBares) > 0) sleep(2); | ||
+ | } | ||
+ | }); | ||
+ | return parent:: | ||
+ | } | ||
+ | ... | ||
+ | // rotina que confere a digitação do texto em input | ||
+ | protected function entrarDadosCorretamente($id, | ||
+ | { | ||
+ | $this-> | ||
+ | do { | ||
+ | $browser-> | ||
+ | sleep(1); | ||
+ | if ($browser-> | ||
+ | } while(true); | ||
+ | }); | ||
+ | } | ||
+ | ... | ||
+ | </ | ||
+ | |||
+ | <code php> | ||
+ | /** | ||
+ | * @group T00 | ||
+ | * @group US01-0 | ||
+ | * @throws \Throwable | ||
+ | */ | ||
+ | public function test_Login_no_CAS() | ||
+ | { | ||
+ | $username = env(' | ||
+ | $password = env(' | ||
+ | $this-> | ||
+ | $browser-> | ||
+ | $browser-> | ||
+ | # Fig: 2 | ||
+ | self:: | ||
+ | self:: | ||
+ | $browser-> | ||
+ | # Fig: 3 | ||
+ | $browser-> | ||
+ | }); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Passos na figuras a seguir, em ordem: | ||
+ | |||
+ | {{ : | ||
+ | {{ : | ||
+ | {{ : | ||
+ | |||
+ | As telas acima são do projeto [[https:// | ||
+ | |||
+ | ---- | ||
+ | ===== Anexo: Portainer – Docker Compose file format v2 ===== | ||
+ | |||
+ | Para execução do container no portainer editamos a stack que utilizará o mock. | ||
+ | |||
+ | Abaixo como exemplo na sua seção services((https:// | ||
+ | |||
+ | < | ||
+ | casino: | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | - 443 | ||
+ | | ||
+ | | ||
+ | ipv4_address: | ||
+ | | ||
+ | - / | ||
+ | </ | ||
+ | |||
+ | Obs: Nesse exemplo existem configurações que necessitam estar disponíveis anteriormente, | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Anexo: Exemplos de comando em Docker ===== | ||
+ | |||
+ | |||
+ | # Listar todos os containers em execução | ||
+ | $ sudo docker container ps | ||
+ | |||
+ | # Parar a execução do container | ||
+ | $ sudo docker container stop mock-casino-container | ||
+ | |||
+ | # Remover um container | ||
+ | $ sudo docker container rm mock-casino-container | ||
+ | |||
+ | # Executa o container e define que sempre será reiniciado, a menos que que seja parado | ||
+ | $ sudo docker container run --restart=unless-stopped mock-casino-container | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Anexo: Laravel Dusk (Básico) ===== | ||
+ | |||
+ | ==== 1. Instalando ==== | ||
+ | |||
+ | Dentro do projeto Laravel você deve incluir o componente do Laravel Dusk((https:// | ||
+ | <code bash> | ||
+ | # diretórios antes | ||
+ | tests | ||
+ | ├── CreatesApplication.php | ||
+ | ├── Feature | ||
+ | │ └── ExampleTest.php | ||
+ | ├── TestCase.php | ||
+ | └── Unit | ||
+ | └── ExampleTest.php | ||
+ | </ | ||
+ | <code bash> | ||
+ | $ composer require --dev laravel/ | ||
+ | $ php artisan dusk: | ||
+ | </ | ||
+ | <code bash> | ||
+ | # diretórios depois | ||
+ | tests | ||
+ | ├── Browser | ||
+ | │ ├── Components | ||
+ | │ ├── console | ||
+ | │ ├── ExampleTest.php | ||
+ | │ ├── Pages | ||
+ | │ │ ├── HomePage.php | ||
+ | │ │ └── Page.php | ||
+ | │ └── screenshots | ||
+ | ├── CreatesApplication.php | ||
+ | ├── DuskTestCase.php | ||
+ | ├── Feature | ||
+ | │ └── ExampleTest.php | ||
+ | ├── TestCase.php | ||
+ | └── Unit | ||
+ | └── ExampleTest.php | ||
+ | </ | ||
+ | ==== 2. Configurando ==== | ||
+ | |||
+ | Você precisa criar um arquivo de configuração de ambiente para o dusk na raiz do projeto como **.env.dusk** que pode ser igual **.env** dependendo do for precisar somente com o Laravel Dusk. | ||
+ | ==== 3. Criando testes ==== | ||
+ | |||
+ | <code bash> | ||
+ | $ php artisan dusk:make T00_Test | ||
+ | </ | ||
+ | |||
+ | <code bash> | ||
+ | # Cria uma classe de teste com o nome solicitado dentro do diretório | ||
+ | # “tests/ | ||
+ | tests/ | ||
+ | ├── Browser | ||
+ | │ ├── Components | ||
+ | │ ├── console | ||
+ | │ ├── ExampleTest.php | ||
+ | │ ├── Pages | ||
+ | │ │ ├── HomePage.php | ||
+ | │ │ └── Page.php | ||
+ | │ ├── screenshots | ||
+ | │ └── T00_Test.php | ||
+ | ├── CreatesApplication.php | ||
+ | ├── DuskTestCase.php | ||
+ | ├── Feature | ||
+ | │ └── ExampleTest.php | ||
+ | ├── TestCase.php | ||
+ | └── Unit | ||
+ | └── ExampleTest.php | ||
+ | </ | ||
+ | |||
+ | ==== 4. Executando ==== | ||
+ | |||
+ | Necessário ter o [[mockcas# | ||
+ | |||
+ | <code bash> | ||
+ | # O comando abaixo executa os testes seguindo a ordem alfabética de todos os testes | ||
+ | $ php artisan dusk | ||
+ | </ | ||
+ | |||
+ | É possível executar por grupo de testes adicionando o parâmetro “--group”, | ||
+ | |||
+ | <code bash> | ||
+ | $ php artisan dusk --group=T00 | ||
+ | </ | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ===== Anexo: Chromedriver ===== | ||
+ | |||
+ | ==== Instalando ==== | ||
+ | |||
+ | - Baixar a aplicação em http:// | ||
+ | - Extrair o arquivo ZIP | ||
+ | - Disponibilizar o binário extraído como executável no PATH do ambiente (Ex: / | ||
+ | |||
+ | ==== Executando ==== | ||
+ | |||
+ | <code bash> | ||
+ | $ / | ||
+ | # | ||
+ | # whitelisted-ips - lista de IPs com conexões permitidas | ||
+ | </ | ||
+ | |||
infotic/projetos/mockcas.txt · Última modificação: 27/04/2021 12:05 por 127.0.0.1