我有一个Rails应用程序,在后端使用Keycloak API进行身份验证。但是现在我想将单点登录与Keycloak集成。
当用户导航到登录页面时,他们将被重定向到Keycloak登录页面。Keycloak将处理所有登录选项。一旦用户成功验证,他们将被重定向到仪表板。
如有需要,我们会提供帮助。
如有需要,我们会提供帮助。
首先,我必须配置webrick使用ssl 从这里举个例子,并且需要为keycloak服务器配置ssl(从这里获取信息,但不包括openshift参考,这是您的客户端应连接的地方)。
我对webrick进行了一些修改,每次启动都会生成新的证书,并将实际有效证书存储在临时文件中,以便openid调用可以使用相同的证书,但如果您使用静态证书,则此操作是过时的。
现在,您需要将提供程序(keycloak服务器)设置输入到提供程序模型中。您可以通过从此链接使用浏览器从keycloak服务器获取有关接口的信息:
https://keycloak-url:PORT/auth/realms/REALM-NAME/.well-known/openid-configuration
我建议修改./db/seeds.rb文件
{issuer: "https://keycloak-url:PORT/auth/realms/REALM-NAME",
authorization_endpoint: "https://keycloak-url:PORT/auth/realms/REALM-NAME/protocol/openid-connect/auth",
token_endpoint: "https://keycloak-url:PORT/auth/realms/REALM-NAME/protocol/openid-connect/token",
userinfo_endpoint: "https://keycloak-url:PORT/auth/realms/REALM-NAME/protocol/openid-connect/userinfo",
jwks_uri: "https://keycloak-url:PORT/auth/realms/REALM-NAME/protocol/openid-connect/certs",
name: "SOME-PROVIDER-NAME",
identifier: "CLIENT-ID-FROM-KEYCLOAK",
scopes_supported: ["SCOPES-FROM-KEYCLOAK"],
secret: "SECRET-FROM-KEYCLOAK"}
OpenIDConnect.http_client.ssl_config.verify_mode = OpenSSL::SSL::VERIFY_NONE
OpenIDConnect.http_client.ssl_config.set_client_cert_file('WEBRICK-CERTIFICATE-FILE','WEBRICK-CERTIFICATE-KEY-FILE')
同时,关于keycloak的json响应还存在一个问题,所以我添加了一些不太友好的检查方式(请勿评判我这样做的方式,只是为了开发目的),以确定响应是否为数组。
def decode_id(id_token)
if config.jwks.to_s.chars.first == '['
OpenIDConnect::ResponseObject::IdToken.decode id_token, config.jwks.first
else
OpenIDConnect::ResponseObject::IdToken.decode id_token, config.jwks
end
end