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.
See also: NGINX Plus OpenID Connect on GitHub.
Pré-requisitos
As instruções presumem que você tenha o seguinte:
-
Um servidor Casdoor em execução. See Server installation and Try with 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-njsPara 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:
-
Log in to your Casdoor account at
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).
-
Record the Client ID and Client Secret; you will use them in Step 4 of Configuring 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 comandopythonindicado 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 the value of theauthorization_endpointfrom Step 3 (in this guide,https://<casdoor-server-address>/login/oauth/authorize)map $host $oidc_token_endpoint– Use the value of thetoken_endpointfrom Step 3 (in this guide,http://<casdoor-server-address>/api/login/oauth/access_token)map $host $oidc_client– Use the value in the Client ID field from Step 4 of Configuring Casdoormap $host $oidc_client_secret– Use the value in the Client Secret field from Step 2 of Configuring 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:
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
jwks_uriin Step 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_urirefere-se ao valor da variável$oidc_jwt_keyfile, que será definido na próxima etapa.) - Update the "default" parameter of the
map $host $oidc_jwt_keyfiledirective to the value obtained from thejwks_urifield in Step 3 (in this guide,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:
- Copy the JSON contents from the JWK file specified in the
jwks_urifield in Step 3 (in this guide,http://<casdoor-server-address>/.well-known/jwks) to a local file (e.g.,/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_keyfilepara o caminho do arquivo local.
- Copy the JSON contents from the JWK file specified in the
- In NGINX Plus R17 and later, NGINX Plus can directly read the JWK file from the URL specified as
-
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
See the Troubleshooting section in the nginx-openid-connect repository.