【发布时间】:2016-11-09 20:47:35
【问题描述】:
我想基于 spring-boot、spring-security 和 spring-oauth2 设置一个简单的 OAuth2 提供程序。
我在单实例机器上完成了所有工作:对于 OAuth2 授权,用户被发送到 /oauth/authorize。大多数用户没有登录,所以他们被spring security重定向到/login,然后返回/oauth/authorize以完成授权。
在默认配置中,spring-security 在用户浏览器中设置一个带有 session-id 的 cookie,并将会话数据存储在内存中。
public static class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.and()
.formLogin()
.loginPage("/login")
.permitAll();
}
[...]
为了在不丢失用户会话的情况下启用负载平衡和蓝绿部署,(我认为)我必须执行以下步骤:
- 禁用服务器端会话 - 对于只负责 OAuth2 授权的 API,我认为没有必要为会话提供共享数据库。
- 相反,在授权期间启用一个包含用户身份验证的记住我的 cookie。
- 将
/login重定向的重定向 URL 存储在不同的位置- 是否可以将其存储在登录表单或用户 cookie 中?或者什么是“无会话”替代方案?
- 禁用 CSRF(我知道该怎么做,并且 oauth2 有 auth_codes,我认为它具有类似的目的。只是为了完整性。)
这种方法有意义吗?需要进行哪些更改?
【问题讨论】:
-
我大致做的是:(a)禁用 CSRF(b)在 cookie 中存储重定向 url。我只需要存储 oauth2 代码。
标签: spring-mvc cookies spring-security oauth stateless