Lädt...


🔧 Ruby on Rails: Autenticação utilizando Devise + Keycloak


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Se você deseja adicionar uma camada de autenticação robusta e simplificar o gerenciamento de usuários na sua aplicação Ruby on Rails, você está no lugar certo! Neste guia, vou te mostrar como integrar o Devise com o Keycloak de forma prática e direta, para que sua aplicação tenha uma autenticação segura e fácil de manter.

Vamos começar juntos passo a passo, para garantir que tudo funcione perfeitamente e você consiga aproveitar o melhor dessas ferramentas.

1. Preparando o Ambiente

Antes de começar, certifique-se de ter o Keycloak rodando localmente ou em um servidor. Keycloak é uma solução de identidade e acesso muito poderosa que suporta autenticação via OAuth2 e OpenID Connect.

2. Adicionando Dependências ao Projeto

No seu arquivo Gemfile, adicione as seguintes gems:

# Gemfile
gem 'devise'
gem 'omniauth-keycloak'
gem 'omniauth-rails_csrf_protection'

Depois, rode bundle install para instalar as dependências.

3. Configurando o Devise

Em seguida, configure o Devise. Se ainda não instalou o Devise na sua aplicação, execute:

rails generate devise:install

E depois crie um modelo de usuário:

rails generate devise User

4. Configurando o OmniAuth com Keycloak

Você precisará adicionar uma configuração personalizada para o OmniAuth para que ele possa se comunicar com o Keycloak. No arquivo config/initializers/devise.rb, configure o OmniAuth para usar o Keycloak:

Devise.setup do |config|
  # Outras configurações do Devise...

  config.omniauth :keycloak, 'CLIENT_ID', 'CLIENT_SECRET',
                  client_options: {
                    site: 'https://SEU_DOMINIO_DO_KEYCLOAK/auth',
                    realm: 'NOME_DO_SEU_REALM',
                    base_url: '',
                    redirect_uri: "http://localhost:3000/users/auth/keycloakopenid/callback"
                  },
                  provider_ignores_state: true,
                  scope: "openid,profile,email",
                  strategy_class: OmniAuth::Strategies::KeycloakOpenId
end

Substitua 'CLIENT_ID', 'CLIENT_SECRET', 'SEU_DOMINIO_DO_KEYCLOAK' e 'NOME_DO_SEU_REALM' pelos valores apropriados para a sua configuração do Keycloak.

5. Atualizando as Rotas

Você também precisa configurar as rotas para que o Devise possa lidar com a autenticação via OmniAuth. Além disso, você pode gerar o controller omniauth_callbacks automaticamente com o seguinte comando:

rails generate devise:controllers users -c omniauth_callbacks

No arquivo config/routes.rb, adicione:

devise_for :users, controllers: { omniauth_callbacks: 'users/omniauth_callbacks' }

6. Criando o Callback Controller

Você precisará criar um controller para lidar com os callbacks do OmniAuth. Crie o arquivo app/controllers/users/omniauth_callbacks_controller.rb com o seguinte conteúdo:

class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  def keycloak
    @user = User.from_omniauth(request.env['omniauth.auth'])

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication
      set_flash_message(:notice, :success, kind: 'Keycloak') if is_navigational_format?
    else
      session['devise.keycloak_data'] = request.env['omniauth.auth']
      redirect_to new_user_registration_url
    end
  end

  def failure
    redirect_to root_path
  end
end

7. Atualizando o Modelo User

Finalmente, você precisará adicionar um método ao seu modelo User para lidar com as informações recebidas do Keycloak:

class User < ApplicationRecord
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable,
         :omniauthable, omniauth_providers: %i[keycloak]

  def self.from_omniauth(auth)
    where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
      user.email = auth.info.email
      user.password = Devise.friendly_token[0, 20]
    end
  end
end

8. Testando a Integração

Com tudo configurado, você agora deve ser capaz de acessar a página de login e ver a opção para se autenticar com o Keycloak.

Para testar a autenticação, você também pode criar um endpoint protegido que requer que o usuário esteja autenticado. Por exemplo, adicione o seguinte método no seu controller:

class DashboardController < ApplicationController
  before_action :authenticate_user!

  def index
    render plain: 'Bem-vindo ao painel, você está autenticado!'
  end
end

Em config/routes.rb, adicione a rota:

get 'dashboard', to: 'dashboard#index'

Ao acessar /dashboard sem estar autenticado, você será redirecionado automaticamente para a página de login do Devise. Certifique-se de que as configurações do Keycloak estão corretas, incluindo o cliente configurado para suportar redirect_uri adequado.

Conclusão

A integração do Keycloak com Devise oferece uma solução segura e flexível para autenticação em aplicações Rails. Isso é especialmente útil para aplicações que precisam gerenciar autenticação de usuários em múltiplos sistemas.

Se tiver alguma dúvida ou quiser mais detalhes sobre algum passo, deixe um comentário!

...

🔧 Ruby on Rails: Autenticação utilizando Devise + Keycloak


📈 102.84 Punkte
🔧 Programmierung

🔧 Asp.Net Core and Keycloak testcontainer. Testing a secure Asp.Net Core Api using Keycloak Testcontainer


📈 28.44 Punkte
🔧 Programmierung

🔧 Okta vs Keycloak: Comparison and easy Okta to Keycloak migration guide


📈 28.44 Punkte
🔧 Programmierung

🔧 IAM mit Keycloak: Meet the Maintainers beim Keycloak DevDay 2024​


📈 28.44 Punkte
🔧 Programmierung

🔧 Rails and Keycloak, Authentication, Authorization, part three


📈 25.4 Punkte
🔧 Programmierung

🔧 Rails and Keycloak, Authentication, Authorization, part two


📈 25.4 Punkte
🔧 Programmierung

🔧 Rails and Keycloak, Authentication Authorization, part one


📈 25.4 Punkte
🔧 Programmierung

📰 Security: Preisgabe von Informationen in Red Hat build of Keycloak 24.0.5 Images (Red Hat)


📈 14.22 Punkte
🐧 Unix Server

🕵️ CVE-2021-3754 | Keycloak input validation


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ KeyCloak up to 11.x unnecessary privileges [CVE-2020-14389]


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ CVE-2024-10039 | Keycloak mTLS improper authentication (Nessus ID 212078)


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ Medium CVE-2020-10686: Redhat Keycloak


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ KeyCloak bis 2.5.0 SAML Request StaxParserUtil InResponseTo Information Disclosure


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ CVE-2020-1731 | Keycloak Operator up to 8.0.1 predictable state


📈 14.22 Punkte
🕵️ Sicherheitslücken

📰 heise-Angebot: iX-Workshop: Mit Keycloak zum sicheren Identity- und Access-Management


📈 14.22 Punkte
📰 IT Nachrichten

📰 Zwei Probleme in Red Hat build of Keycloak 22.0.13 (Red Hat)


📈 14.22 Punkte
📰 IT Security Nachrichten

🔧 Integration Testing With Keycloak, Spring Security, Spring Boot, and Spock Framework


📈 14.22 Punkte
🔧 Programmierung

🕵️ Medium CVE-2020-27826: Redhat Keycloak


📈 14.22 Punkte
🕵️ Sicherheitslücken

📰 Zwei Probleme in keycloak (Red Hat)


📈 14.22 Punkte
📰 IT Security Nachrichten

🕵️ keycloak-httpd-client-install up to 0.8 Command Line information disclosure


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ Keycloak Node.js Adapter bis 3.0 Invalid Token schwache Authentisierung


📈 14.22 Punkte
🕵️ Sicherheitslücken

📰 heise-Angebot: iX-Workshop IAM und SSO: Mit Keycloak zum sicheren Zugriffsmanagement


📈 14.22 Punkte
📰 IT Nachrichten

📰 Anzeige: Keycloak für sicheres Identity- und Access-Management


📈 14.22 Punkte
📰 IT Nachrichten

🕵️ CVE-2021-3856 | Keycloak path traversal


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ Red Hat KeyCloak up to 11.x URL Transformation path traversal


📈 14.22 Punkte
🕵️ Sicherheitslücken

📰 Anzeige: Identity- & Access-Management mit Keycloak? So gehts!


📈 14.22 Punkte
📰 IT Nachrichten

🐧 cron.weekly issue #130: Github, keycloak, proc, redis6, cron & more


📈 14.22 Punkte
🐧 Linux Tipps

🕵️ KeyCloak bis 4.0.0 Session Loop Denial of Service


📈 14.22 Punkte
🕵️ Sicherheitslücken

📰 Anzeige: Mastering Keycloak - umfassendes IAM für Linux-Experten


📈 14.22 Punkte
📰 IT Nachrichten

📰 heise-Angebot: iX-Workshop: Die SSO-Software Keycloak mit eigenen Extensions erweitern


📈 14.22 Punkte
📰 IT Nachrichten

🔧 How to secure a single REST API resource with multiple scopes using Keycloak


📈 14.22 Punkte
🔧 Programmierung

🔧 Understanding Authentication & Authorization with help of keycloak


📈 14.22 Punkte
🔧 Programmierung

🕵️ Medium CVE-2021-20195: Redhat Keycloak


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ KeyCloak 6.0.1 Account Console Request privilege escalation


📈 14.22 Punkte
🕵️ Sicherheitslücken

🕵️ keycloak-httpd-client-install up to 0.7 Temp File Symlink privilege escalation


📈 14.22 Punkte
🕵️ Sicherheitslücken

matomo