2016-09-12 34 views
0

我正在尝试构建spring-angular2(新的spring)应用程序,并选择OAuth2作为安全模型。我的新应用程序有3个部分。身份验证服务器,后端服务器和前端(角度2)。目前我使用的OAuth2仅用于身份验证目的有关Spring OAuth2体系结构的建议

根据我目前的设计,我的服务器(业务层)将与身份验证服务器进行身份验证(基于授权码)通信,并且将接收OAuth2令牌(短期访问令牌和更长寿命的刷新令牌)。我的意图是使用此刷新令牌在需要时生成访问令牌直至其到期,之后,重定向到auth服务器进行登录。所有令牌管理都将在服务器上进行处理,前端对此不知情。

现在,当我运行我的应用程序时,angular2应用程序将首先加载,它将尝试访问受保护的URL(如身份验证检查)。如果服务器返回401错误,angular将强制网页重定向到auth服务器以进行登录。后端服务器使用会话来处理安全性(默认oauth2client设置)。这里的问题是,当会话因空闲而过期(默认30分钟)时,我无法使用刷新令牌(10天有效期),Spring安全会将网页重定向到auth服务器进行登录。

我认为将会话有效期延长至10天并不是一个好主意。所以我打算避免设计中的会话,在用户模型(db)中存储令牌,并向浏览器发送一些唯一的ID,这些ID将用于访问此令牌并使用过滤器创建Authentication对象。 Angular会将此ID存储在localstorage中并发送每个请求头。

请让我知道如果我需要添加任何输入到这个问题。

我需要您的建议

1)这个架构是否好?你有什么建议来改善这个吗?

2)有什么办法,我可以处理刷新令牌而不用担心会话空闲超时? (正如我前面提到的,我是春天世界的新手,所以我可能会在这里错过一些小东西)

3)如果我去永久会话,你如何建议我应该与浏览器(angular2)沟通唯一的ID?我也想避免Cookie。在这个设置中,url查询字符串是否只能将此唯一值传递给角度应用程序?

回答

0

与Spring没有关系,但对于OAuth应用程序来说不需要服务器端,因为访问令牌是不记名令牌。但在你的情况,我想你可以使刷新令牌限制为25分钟,以便在你的会话闲置之前,你会得到一个新的令牌,但在这里再次(如果我已经正确理解)问题是你的会话仍然会在服务器上超时用户仍然会被重定向进行身份验证。

从逻辑上说,您的资源服务器应该有一个过滤器,它自己或Authz服务器验证令牌并授予访问权限。服务器端没有SESSION管理。另外,请考虑注销场景。

+0

我打算在将来使用相同的Auth服务器开发其他应用程序。我使用Auth服务器进行初始身份验证并访问令牌更新。 –

+0

短生活刷新令牌意味着,活跃用户将经常被重定向到登录屏幕。这种情况我试图避免。 –

+0

这就是OAuth2的原因,不需要服务器端会话。 OAuth令牌表示Session就像基于cookie的SME一样。 – dvsakgec

相关问题