【发布时间】:2017-01-20 05:11:50
【问题描述】:
我正在尝试构建 spring-angular2(spring 新手)应用程序,我选择 OAuth2 作为安全模型。我的新应用程序有 3 个部分。身份验证服务器、后端服务器和前端(角度 2)。目前我使用 OAuth2 仅用于身份验证目的
根据我目前的设计,我的服务器(业务层)将与身份验证服务器通信以进行身份验证(基于授权码)并将接收 OAuth2 令牌(短期访问令牌和长期刷新令牌)。我的目的是在需要时使用此刷新令牌生成访问令牌,直到其到期,然后重定向到身份验证服务器进行登录。所有令牌管理都将在服务器上处理,前端对此一无所知。
现在,当我运行我的应用程序时,使用这种设计,angular2 应用程序将首先加载,它会尝试访问受保护的 url(作为身份验证检查)。如果服务器返回 401 错误,Angular 将强制网页重定向到身份验证服务器进行登录。后端服务器使用会话来处理安全性(默认 oauth2client 设置)。这里的问题是,当会话由于空闲而到期(默认 30 分钟)时,我将无法使用刷新令牌(有效期 10 天),并且 Spring Security 会将网页重定向到身份验证服务器进行登录。
我认为将会话有效期延长至 10 天不是一个好主意。所以我打算避免设计中的会话,将令牌存储在用户模型(db)中,并向浏览器发送一些唯一的 id,用于访问这个令牌并使用过滤器创建身份验证对象。 Angular 会将此 id 存储在 localstorage 中并在每个请求标头中发送。
如果我需要为此问题添加更多输入,请告诉我。
我需要你的建议
1) 这个架构好不好?你有什么改进的建议吗?
2) 有什么方法可以处理刷新令牌而不用担心会话空闲超时? (正如我之前提到的,我是 Spring 世界的新手。所以我可能会在这里遗漏一些小东西)
3) 如果我不使用会话,你建议我应该如何将唯一 id 传达给浏览器(angular2)?我也想避免使用cookies。在此设置中,url 查询字符串是否是唯一将此唯一值传递给 angular 应用程序的方法?
【问题讨论】:
标签: spring authentication spring-security-oauth2 oauth2