Pular para o conteúdo principal

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:

  1. Faça login na sua conta Casdoor em http://your-casdoor-url.com/login/.

  2. 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.

    addApp

  3. 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.

    appName

    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).

    redirectURL

    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).
  4. 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.

    Cliente

  5. 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.

    addRole

  6. 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.

    roleName

  7. 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.

  8. Na página Adicionar que se abre, modifique o Nome e Nome de Exibição como desejar (aqui é user1).

    userName

    Selecione NGINX Plus no campo Aplicação de Inscrição.

    signupApp

    No campo Contas Gerenciadas, selecione NGINX Plus em Aplicação e preencha o nome de usuário e senha.

    managedAcc

  9. 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).

    subUsers

Configurando o NGINX Plus

Para configurar o NGINX Plus como a parte confiante do OpenID Connect, siga estes passos:

  1. Comece criando um clone do repositório GitHub nginx-openid-connect:

    git clone https://github.com/nginxinc/nginx-openid-connect
  2. 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
  3. 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 comando python 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",
    "...":"...",
    }
  4. 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 do authorization_endpoint de Etapa 3 (neste guia, https://<casdoor-server-address>/login/oauth/authorize)
    • map $host $oidc_token_endpoint – Use o valor do token_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 Casdoor
    • map $host $oidc_client_secret – Use o valor no campo Client Secret de Etapa 2 de Configurando o Casdoor
    • map $host $oidc_hmac_key – Use uma frase única, longa e segura
  5. 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:
      1. Comente (ou remova) a diretiva auth_jwt_key_file.
      2. 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.)
      3. Atualize o parâmetro "default" da diretiva map $host $oidc_jwt_keyfile para o valor obtido do campo jwks_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:
      1. 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).
      2. 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.
  6. 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.

teste

Solução de problemas

Por favor, consulte a seção Solução de Problemas no repositório nginx-openid-connect no GitHub.