Pular para o conteúdo principal

APISIX

Atualmente, existem 2 métodos para usar o Casdoor para se conectar ao APISIX via plugins do APISIX e proteger as APIs por trás do APISIX: usando o plugin Casdoor do APISIX ou usando o plugin OIDC do APISIX.

Conecte o Casdoor via plugin Casdoor do APISIX

Este plugin, authz-casdoor, pode proteger APIs por trás do APISIX, forçando cada solicitação a ser autenticada sem modificar o código da API.

Como habilitá-lo

Você precisa especificar este plugin ao criar a rota e fornecer todos os campos necessários. Aqui está um exemplo.

curl "http://127.0.0.1:9180/apisix/admin/routes/1" -H "X-API-KEY: edd1c9f034335f136f87ad84b625c8f1" -X PUT -d '
{
"methods": ["GET"],
"uri": "/anything/*",
"plugins": {
"authz-casdoor": {
"endpoint_addr":"http://localhost:8000",
"callback_url":"http://localhost:9080/anything/callback",
"client_id":"7ceb9b7fda4a9061ec1c",
"client_secret":"3416238e1edf915eac08b8fe345b2b95cdba7e04"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

Neste exemplo, criamos uma rota "/anything/*" apontada para "httpbin.org:80" usando a API de administração do APISIX, com o plugin "authz-casdoor" habilitado. Esta rota agora está sob a proteção de autenticação do Casdoor.

Atributos

NomeTipoRequisitoPadrãoVálidoDescrição
endpoint_addrstringobrigatórioA URL do Casdoor.
client_idstringobrigatórioO ID do cliente no Casdoor.
client_secretstringobrigatórioO segredo do cliente no Casdoor.
callback_urlstringobrigatórioA URL de retorno que é usada para receber o estado e o código.

endpoint_addr e callback_url não devem terminar com '/'

Na configuração do plugin "authz-casdoor", podemos ver quatro parâmetros.

O primeiro é "callback_url". Esta é a URL de retorno no OAuth2. Deve ser enfatizado que esta URL de retorno deve pertencer à "uri" que você especificou para a rota. Por exemplo, neste exemplo, http://localhost:9080/anything/callback obviamente pertence a "/anything/*". Somente desta forma, a visita à callback_url pode ser interceptada e utilizada pelo plugin (para que o plugin possa obter o código e o estado no OAuth2). A lógica da callback_url é implementada completamente pelo plugin, então não há necessidade de modificar o servidor para implementar este retorno.

O segundo parâmetro "endpoint_addr" é obviamente a URL do Casdoor. O terceiro e quarto parâmetros são "client_id" e "client_secret", que você pode obter do Casdoor ao registrar um aplicativo.

Como funciona?

Suponha que um novo usuário que nunca visitou esta rota antes vai visitá-la (http://localhost:9080/anything/d?param1=foom2=bar). Considerando que "authz-casdoor" está habilitado, esta visita seria processada primeiro pelo plugin "authz-casdoor". Após verificar a sessão e confirmar que este usuário não foi autenticado, a visita será interceptada. Com a URL original que o usuário deseja visitar mantida, ele será redirecionado para a página de login do Casdoor.

Após fazer login com sucesso com um nome de usuário e senha (ou qualquer método que use), o Casdoor redirecionará este usuário para a "callback_url" com os parâmetros GET "code" e "state" especificados. Como a "callback_url" é conhecida pelo plugin, quando a visita à "callback_url" for interceptada desta vez, a lógica do "Authorization code Grant Flow" no OAuth2 será acionada. Isso significa que o plugin solicitará o token de acesso para confirmar se este usuário realmente fez login. Após essa confirmação, o plugin redirecionará este usuário para a URL original que ele deseja visitar, que foi mantida por nós anteriormente. O status de login também será mantido na sessão.

Na próxima vez que este usuário quiser visitar a URL por trás desta rota (por exemplo, http://localhost:9080/anything/d), após descobrir que este usuário foi autenticado anteriormente, este plugin não redirecionará mais este usuário. Desta forma, o usuário pode visitar o que quiser sob esta rota sem ser interferido.

Conecte o Casdoor via plugin OIDC do APISIX

O Casdoor pode usar o protocolo OIDC para se conectar ao APISIX, e este documento mostrará como fazer isso.

A seguir estão alguns dos nomes usados na configuração:

CASDOOR_HOSTNAME: Nome de domínio ou IP onde o servidor Casdoor está implantado.

APISIX_HOSTNAME: Nome de domínio ou IP onde o APISIX está implantado.

Etapa 1: Implante o Casdoor e o APISIX

Primeiramente, implante o Casdoor e o APISIX.

Após uma implantação bem-sucedida, você precisa garantir:

  1. O Casdoor pode ser acessado e usado normalmente.
  2. Defina o valor de origin do Casdoor (conf/app.conf) para CASDOOR_HOSTNAME. Configuração do Casdoor

Etapa 2: Configurar aplicativo Casdoor

  1. Crie um novo aplicativo Casdoor ou use um existente.
  2. Adicione uma URL de redirecionamento: http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT, e substitua REDIRECTWHATYOUWANT pela URL de redirecionamento desejada.
  3. Selecione "JWT-Empty" para a opção de formato de Token.
  4. Adicione o provedor desejado e configure outras configurações.

Configuração do Aplicativo Na página de configurações do aplicativo, você encontrará os valores de Client ID e Client Secret como mostrado na imagem acima. Usaremos eles na próxima etapa.

Abra seu navegador favorito e visite: http://CASDOOR_HOSTNAME/.well-known/openid-configuration, onde você encontrará a configuração OIDC do Casdoor.

Etapa 3: Configurar APISIX

O APISIX tem suporte oficial para OIDC, que é implementado usando lua-resty-openidc.

Você pode personalizar as configurações de acordo com a documentação OIDC do APISIX. As seguintes configurações de roteamento serão usadas:

# Use your own X-Api-Key
$ curl -X POST APISIX_HOSTNAME/apisix/admin/routes -H "X-Api-Key: edd1c9f034335f136f87ad84b625c8f1" -d '{
"uri": "/get",
"name": "apisix_casdoor_test",
"plugins": {
"openid-connect": {
"client_id": "Client ID",
"client_secret": "Client Secret",
"discovery": "http://CASDOOR_HOSTNAME/.well-known/openid-configuration",
"introspection_endpoint_auth_method": "client_secret_basic",
"logout_path": "/logout",
"realm": "master",
"redirect_uri": "http://APISIX_HOSTNAME/REDIRECTWHATYOUWANT",
"bearer_only": false,
"set_id_token_header": false,
"access_token_in_authorization_header": true,
"set_access_token_header": true,
"set_userinfo_header": false,
"realm": "master"
}
},
"upstream": {
"type": "roundrobin",
"nodes": {
"httpbin.org:80": 1
}
}
}'

Agora, visite http://APISIX_HOSTNAME/get, e o navegador irá redirecioná-lo para a página de login do Casdoor. Após fazer login com sucesso, você verá que uma solicitação foi enviada para httpbin.org como mostrado na captura de tela abaixo. Resultado_APISIX