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