如何将keycloak重定向到应用程序页面并获取令牌

Posted

技术标签:

【中文标题】如何将keycloak重定向到应用程序页面并获取令牌【英文标题】:How to redirect keyclock to application's page and get token 【发布时间】:2020-12-26 20:29:38 【问题描述】:

我正在使用 keycloak 的登录和注册页面。对于登录,我使用:

 keycloak.init(onLoad: 'login-required').then(function (authenticated) 
        if (!authenticated) 
           
         else

        

这很好用,因为我可以使用上面的代码重定向到收到令牌的应用程序页面。但是,如果用户单击注册链接并注册为新用户,我会看到浏览器重定向到:

htttps://localhost/auth/realms/realm1/login-actions/registration?session_code=2TC4xBE5BoFy_Dt7nK8wNDzdLx-8rJmA7l0IjTY1Khk&execution=2e64e3ef-185a-4ca8-a6cc-51c40f9fb7fc&client_id=bizmapp&tab_id=EbayK64spNk

我想要注册后的 keycloak 回调,我可以在其中获取令牌并将用户重定向到应用程序的原始安全页面,用户希望在登录/注册之前访问该页面

【问题讨论】:

【参考方案1】:

在 Keycloak 管理界面中,转到“身份验证”,然后转到“流程”选项卡。 在左上角的下拉菜单中选择“注册”以配置注册流程。 然后,您可以在流程结束时添加“浏览器重定向/刷新”操作。

您可以在https://www.keycloak.org/docs/latest/server_admin/index.html#_authentication-flows找到更多信息

将令牌作为查询参数传递通常被认为是一个坏主意,因为它们保留在浏览器历史记录中,如果其他人访问该浏览器并且 2° 被泄露给第 3 方,例如当您使用类似的东西时,1° 可能会被盗谷歌分析。

您的应用程序应该能够检测到用户已通过 Keycloak SSO cookie(或任何其他机制)进行身份验证,我认为这将在注册后自动设置。您只需要依赖为您的应用程序配置的Keycloak adapter。

【讨论】:

您提到了“将令牌作为查询参数传递...”。你指的是我帖子中的网址吗?我认为这是一次性会话代码。需要哪些设置才能不将令牌作为查询参数传递?其次,在 keycloak JS 适配器中,我们获取令牌和刷新令牌。我将它们保存在自定义 cookie 中。这不是推荐的方法吗?我应该使用 keycloak 创建的 cookie 吗?哪个 keycloak cookie 有刷新令牌? 不,我不是在谈论您在问题中输入的 URL,而是在谈论回调。 HTTPS 服务器 cookie 不能被窃取(它们对其他应用程序不“可见”)。在响应中将令牌发回给您也可以,但这不是 Keycloak 在注册后所做的。一旦您配置了我提到的浏览器重定向操作,您将看到 Keycloak 在用户注册后设置其 SSO cookie。从用户被重定向到的页面,您可以从 keycloak.token 和 keycloak.refreshToken (这是标准的“Keycloak 适配器”逻辑)获取访问令牌。如果您需要更多信息,请告诉我。 不,我不是在谈论您在问题中输入的 URL,而是在谈论回调。 HTTPS 服务器 cookie 不能被窃取(它们对其他应用程序不“可见”)。在响应中发回令牌也可以,但这不是 Keycloak 在注册后所做的。您可以只配置我提到的浏览器重定向操作。您将看到 Keycloak 在用户注册后设置其 SSO cookie。从用户被重定向到的页面,您可以从 keycloak.token 和 keycloak.refreshToken (这是标准的“Keycloak 适配器”逻辑)获取访问令牌。如果您需要更多信息,请告诉我。 在我的 keycload 安装中,我没有看到在注册流程结束时添加操作的选项。在验证电子邮件/配置文件后,我还想直接重定向到客户端允许的回调 URI 之一@otonglet 浏览器/重定向不在流选项卡下的 Http Challenge 中吗?它不在注册中..

以上是关于如何将keycloak重定向到应用程序页面并获取令牌的主要内容,如果未能解决你的问题,请参考以下文章

根据角色将不同的用户重定向到 Keycloak 登录的不同页面

如果 keycloak 会话过期,我如何重定向到登录页面?

反应:在重定向到 Keycloak IDP 页面之前阻止显示应用程序

如何将角度应用程序从keycloak登录重定向到特定路线

如何在使用 keycloak 进行身份验证时处理 uri 重定向

空闲超时后,由 Keycloak 客户端应用程序保护重定向到登录页面。应用程序位于应用程序网关后面