如何将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 IDP 页面之前阻止显示应用程序