3.5. 隐式和混合流程
默认情况下,适配器使用 Authorization Code 流。
在这个版本中,红帽构建的 Keycloak 服务器会向应用程序返回授权代码,而不是身份验证令牌。JavaScript 适配器在浏览器重定向到应用后交换访问令牌的代码和刷新令牌。
红帽构建的 Keycloak 还支持 Implicit 流,在成功通过红帽构建的 Keycloak 进行身份验证后立即发送访问令牌。此流的性能可能比标准流更好,因为不存在额外的请求来交换令牌的代码,但访问令牌过期时有影响。
但是,在 URL 片段中发送访问令牌可能是安全漏洞。例如,令牌可以通过 Web 服务器日志和浏览器历史记录泄漏。
要启用隐式流,您可以在红帽构建的 Keycloak 管理控制台中为客户端启用 Implicit Flow Enabled 标志。您还可以将参数 流 以及值 隐式 传递给 init 方法:
await keycloak.init({
flow: 'implicit'
})
await keycloak.init({
flow: 'implicit'
})
请注意,只有访问令牌会被提供,且不存在刷新令牌。这意味着,在访问令牌过期后,应用程序必须再次重定向到红帽构建的 Keycloak 来获取新的访问令牌。
红帽构建的 Keycloak 还支持 混合 流。
此流程要求客户端在 Admin 控制台中同时启用了 Standard Flow 和 Implicit Flow。红帽构建的 Keycloak 服务器随后将代码和令牌都发送到您的应用程序。访问令牌可以立即使用,而代码可以交换来访问和刷新令牌。与隐式流类似,混合流对性能很好,因为访问令牌会立即可用。但是,令牌仍然在 URL 中发送,之前提到的安全漏洞可能仍然适用。
混合流中的一个优点是,应用程序可以使用刷新令牌。
对于混合流,您需要将带有值 hybrid 的参数 流 传递给 init 方法:
await keycloak.init({
flow: 'hybrid'
});
await keycloak.init({
flow: 'hybrid'
});