我目前正在尝试将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
但是还是不行...
那么,如果有人知道我该怎么做才能使其发挥作用?
我已经在 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。