使用omniauth和Keycloak处理csrf_Detected错误

问题描述 投票:0回答:1

我目前正在尝试将keycloak与使用omniauth的rails应用程序一起使用,但没有设计。

这是我的配置:

钥匙斗篷 v22.0.3

omniauth-keycloak v1.5.1

omniauth v2.1.1

我遵循了omniauth和keycloak-strategie文档中的所有内容,但我目前面临一个问题。

当我尝试登录我的用户时,我收到此错误:

我尝试从omniauth文档中实现rack_csrf,但它仍然不起作用。

https://github.com/omniauth/omniauth#rack_csrf

我的 config/initializers/omniauth.rb 文件如下所示:

Rails.application.config.middleware.use OmniAuth::Builder do
  options = {
    site: 'http://localhost:8080', # L'URL de base de Keycloak
    realm: 'SecondRealm', # Le nom de votre realm Keycloak
    base_url: ''
  }

  provider :keycloak_openid, 'localApp', Rails.application.credentials.keycloak.client_secret, client_options: options,
        name: 'keycloak'
end

OmniAuth::AuthenticityTokenProtection.default_options(key: "csrf.token", authenticity_param: "_csrf")

但还是不行

所以我尝试仍然从omniauth文档中更改会话管理:

https://github.com/omniauth/omniauth#rails-api

我的 config/application.rb 文件如下所示:

require_relative "boot"

require "rails/all"

Bundler.require(*Rails.groups)

module PocRailsReactKeycloak
  class Application < Rails::Application
    config.load_defaults 7.0

    config.session_store :cookie_store, key: '_interslice_session'
    config.middleware.use ActionDispatch::Cookies # Required for all session management
    config.middleware.use ActionDispatch::Session::CookieStore, config.session_options
  end
end

但是还是不行...

那么,如果有人知道我该怎么做才能使其发挥作用?

ruby-on-rails keycloak omniauth
1个回答
0
投票

我已经在 Rails 7 应用程序中实现了这个。我为此使用了以下宝石

gem 'keycloak-api-rails'
,
gem 'omniauth'
,
gem 'omniauth-keycloak'
,
gem 'omniauth-rails_csrf_protection'

我认为您需要添加omniauth-rails_csrf_protection gem。此外,在生成登录 URL 时,我使用

SecureRandom.hex
创建了状态并将其存储到 session['omniauth.state'] = state 并将相同的状态传递给 Keycloak 的登录 URL。

© www.soinside.com 2019 - 2024. All rights reserved.