提问人:Unik6065 提问时间:11/14/2023 更新时间:11/14/2023 访问量:21
如何使用 react 和 rails 后端配置 keycloak
How to configure keycloak with react and rails backend
问:
我目前正在研究将Keycloak与React前端和Ruby on Rails后端集成。为了遵循最佳实践,我在Keycloak中设置了两个单独的客户端:一个配置为前端的公共客户端,另一个配置为后端的私有客户端。在以下讨论中建议使用此方法:https://keycloak.discourse.group/t/keycloak-js-client-and-confidential-clients/10063/9。虽然无法使用仅持有者模式,但我选择了私有模式以增强安全性。
在每个客户端中,我都定义了必要的角色。使用 react-oidc-context(https://github.com/authts/react-oidc-context),我成功地在我的前端和 Keycloak 前端客户端之间建立了连接。
const oidcConfig = {
authority: "http://localhost:8080/realms/SecondRealm",
client_id: "localApp-frontend",
redirect_uri: "http://localhost:3000/"
}
到目前为止,我已经了解到我应该将我的令牌作为“仅持有者”发送到我的后端。然而,一个挑战出现了,因为我不能完全信任它,因为它没有由任何私钥签名(请记住,我正在使用公共客户端作为前端)。作为解决方案,我正在考虑需要调用Keycloak后端客户端来获取我随后可以信任的签名令牌。
这里开始我的假设:
我认为在这一点上,一个不错的选择可能是将 omniauth 与 keycloak-strategy 一起使用。如果我实现这个:
Rails.application.config.middleware.use OmniAuth::Builder do
provider :keycloak_openid, 'localAppBackend', Rails.application.credentials.keycloak_secret,
client_options: {base_url: '', site: 'http://localhost:8080', realm: 'SecondRealm'},
name: 'keycloak'
end
然后我修改我的路由:
get 'auth/:provider/callback', to: 'sessions#create'
get '/login', to: 'sessions#new'
并按照 Omniauth 官方文档中的描述实现我的session_controller:
class SessionsController < ApplicationController
def new
render :new
end
def create
user_info = request.env['omniauth.auth']
raise user_info # Your own session management should be placed here.
end
end
但在这一点上,我的挑战在于如何调用这个后端客户端,以及如何识别哪个用户正在尝试访问我的资源。
这种不确定性使我怀疑这是否是最佳解决方案。有没有办法在用户使用Keycloak前端客户端登录时发送签名的后端客户端的角色?
答: 暂无答案
评论