Nginx
Habilite o login único baseado em OpenID Connect para aplicações intermediadas pelo NGINX Plus usando o Casdoor como provedor de identidade (IdP).
Este guia explica como habilitar o login único (SSO) para aplicações que estão sendo intermediadas pelo NGINX Plus. A solução utiliza OpenID Connect como mecanismo de autenticação, com Casdoor como provedor de identidade (IdP) e NGINX Plus como a parte confiante.
Veja Também: Você pode encontrar mais informações sobre a integração do NGINX Plus com OpenID Connect no repositório do projeto no GitHub.
Pré-requisitos
As instruções presumem que você tenha o seguinte:
Um servidor Casdoor em execução. Consulte a documentação do Casdoor para Instalação do Servidor e Experimente com Docker.
Uma assinatura do NGINX Plus e NGINX Plus R15 ou posterior. Para instruções de instalação, consulte o Guia do Administrador do NGINX Plus.
O módulo JavaScript do NGINX, que é necessário para lidar com a interação entre o NGINX Plus e o IdP. Após instalar o NGINX Plus, instale o módulo usando o comando apropriado para o seu sistema operacional.
Para Debian e Ubuntu:
sudo apt install nginx-plus-module-njs
Para CentOS, RHEL e Oracle Linux:
sudo yum install nginx-plus-module-njs
A seguinte diretiva deve ser incluída no contexto de configuração de nível superior ("main") em /etc/nginx/nginx.conf para carregar o módulo JavaScript do NGINX:
load_module modules/ngx_http_js_module.so;
Configurando o Casdoor
Nota: O procedimento a seguir reflete a interface gráfica do Casdoor no momento da publicação, mas a interface pode sofrer alterações. Use este guia como referência e adapte-o conforme necessário à interface gráfica atual do Casdoor.
Para criar um cliente Casdoor para o NGINX Plus na interface gráfica do Casdoor, siga estes passos:
Faça login na sua conta Casdoor em http://your-casdoor-url.com/login/.
Na coluna de navegação superior, clique em Aplicação. Na página Aplicação que se abre, clique no botão Adicionar no canto superior esquerdo.
Na página Editar Aplicação que se abre, altere o valor nos campos Nome e Nome de Exibição para o nome da aplicação para a qual você está habilitando o SSO. Aqui, estamos usando o NGINX Plus.
No campo URLs de Redirecionamento, digite a URL da instância do NGINX Plus incluindo o número da porta e terminando em /_codexch (neste guia é https://your-site-url.com:443/_codexch).
Notas:
- Para produção, recomendamos fortemente que você use SSL/TLS (porta 443).
- O número da porta é obrigatório mesmo quando você está usando a porta padrão para HTTP (80) ou HTTPS (443).
Registre os valores nos campos Client ID e Client Secret. Você irá copiá-los para o arquivo de configuração do NGINX Plus em Etapa 4 de Configurando o NGINX Plus.
Clique em Funções na coluna de navegação superior, depois clique no botão Adicionar no canto superior esquerdo da página que se abre.
Na página Adicionar que se abre, digite um valor nos campos Nome e Nome de Exibição (aqui é nginx-casdoor-role) e clique no botão Salvar.
Na coluna de navegação superior, clique em Usuários. Na página Usuários que se abre, clique em Editar para editar um dos usuários existentes ou clique no botão Adicionar no canto superior esquerdo para criar um novo usuário.
Na página Adicionar que se abre, modifique o Nome e Nome de Exibição como desejar (aqui é user1).
Selecione NGINX Plus no campo Aplicação de Inscrição.
No campo Contas Gerenciadas, selecione NGINX Plus em Aplicação e preencha o nome de usuário e senha.
Volte para a página Funções e clique em Editar na linha nginx-casdoor-role. Na página que se abre, no campo Sub usuários, selecione o nome de usuário que você acabou de criar (aqui é built-in/user1).
Configurando o NGINX Plus
Para configurar o NGINX Plus como a parte confiante do OpenID Connect, siga estes passos:
Comece criando um clone do repositório GitHub nginx-openid-connect:
git clone https://github.com/nginxinc/nginx-openid-connect
Copie os seguintes arquivos do clone para o diretório /etc/nginx/conf.d:
- frontend.conf
- openid_connect.js
- openid_connect.server_conf
- openid_connect_configuration.conf
Recupere as URLs para o ponto final de autorização, ponto final de token e arquivo JSON Web Key (JWK) da configuração do Casdoor. Abra um terminal e execute o seguinte comando
curl
, canalizando a saída para o comandopython
indicado para gerar um formato de configuração legível. Por brevidade, truncamos a saída para exibir apenas os campos relevantes.curl http://<casdoor-server-address>/.well-known/openid-configuration | python -m json.tool
{
"authorization_endpoint": "https://<casdoor-server-address>/login/oauth/authorize",
"...":"...",
"token_endpoint": "http://<casdoor-server-address>/api/login/oauth/access_token",
"...":"...",
"jwks_uri": "http://<casdoor-server-address>/.well-known/jwks",
"...":"...",
}Abra /etc/nginx/conf.d/openid_connect_configuration.conf usando o editor de texto de sua preferência. Modifique o valor do parâmetro "default" para cada uma das seguintes diretivas map com os valores especificados:
map $host $oidc_authz_endpoint
– Use o valor doauthorization_endpoint
de Etapa 3 (neste guia,https://<casdoor-server-address>/login/oauth/authorize
)map $host $oidc_token_endpoint
– Use o valor dotoken_endpoint
de Etapa 3 (neste guia,http://<casdoor-server-address>/api/login/oauth/access_token
)map $host $oidc_client
– Use o valor no campo Client ID de Etapa 4 de Configurando o Casdoormap $host $oidc_client_secret
– Use o valor no campo Client Secret de Etapa 2 de Configurando o Casdoormap $host $oidc_hmac_key
– Use uma frase única, longa e segura
Configure o arquivo JWK com base na versão do NGINX Plus em uso:
- No NGINX Plus R17 e posteriores, o NGINX Plus pode ler diretamente o arquivo JWK da URL especificada como
jwks_uri
em Etapa 3. Faça as seguintes alterações em /etc/nginx/conf.d/frontend.conf:- Comente (ou remova) a diretiva auth_jwt_key_file.
- Descomente a diretiva auth_jwt_key_request. (O parâmetro
/_jwks_uri
refere-se ao valor da variável$oidc_jwt_keyfile
, que será definido na próxima etapa.) - Atualize o parâmetro "default" da diretiva
map $host $oidc_jwt_keyfile
para o valor obtido do campojwks_uri
em Etapa 3 (neste guia,http://<casdoor-server-address>/.well-known/jwks
).
- No NGINX Plus R16 e anteriores, ou se preferir, o arquivo JWK deve estar localizado no disco local. Siga estes passos:
- Copie o conteúdo JSON do arquivo JWK especificado no campo
jwks_uri
em Etapa 3 (neste guia,http://<casdoor-server-address>/.well-known/jwks
) para um arquivo local (por exemplo,/etc/nginx/my_casdoor_jwk.json
). - Em /etc/nginx/conf.d/openid_connect_configuration.conf, altere o parâmetro "default" da diretiva
map $host $oidc_jwt_keyfile
para o caminho do arquivo local.
- Copie o conteúdo JSON do arquivo JWK especificado no campo
- No NGINX Plus R17 e posteriores, o NGINX Plus pode ler diretamente o arquivo JWK da URL especificada como
Certifique-se de que o usuário especificado na diretiva user dentro do arquivo de configuração do NGINX Plus (geralmente /etc/nginx/nginx.conf) tenha permissões de leitura para o arquivo JWK.
Testando
Abra um navegador e insira o endereço da sua instância NGINX Plus. Em seguida, tente fazer login usando as credenciais de um usuário que foi atribuído à função NGINX Plus.
Solução de problemas
Por favor, consulte a seção Solução de Problemas no repositório nginx-openid-connect no GitHub.