我使用的@EnableOauth2Sso
遵循类似于Spring oauth2 tutorial中描述的体系结构:auth服务器,启用sso的zuul代理,分离的UI应用程序等。
Auth server ---- Resource Server (Zuul app) ---- Angular UI App
问题是当UI针对资源服务器注销时,它成功删除了资源服务器JSESSIONID,然后用户被重定向到主页。当用户想要再次登录时,他被重定向到auth服务器,但不是要求用户+密码,而是认为他仍然被记录。 auth服务器JSESSIONID仍在那里,并且不受之前的Resource Server lougout的影响。
我怎样才能从auth服务器注销?
答案 0 :(得分:2)
由于没有开箱即用的Spring OAuth2 Single Logout,我们必须解决这个问题,创建一个/ revoke端点,调用Auth Server从中注销:
<强> UI:强>
$http({
method: 'POST',
url: API + '/logout'
}).then(function() {
$http({
method: 'GET',
url: API + '/auth/oauth/session/revoke'
}).then(function() {
window.location = '/';
});
});
Zuul服务器:
zuul:
...
routes:
authServer:
path: /auth/**
url: ${authServer.url}/auth/
...
验证服务器:
@RestController
public class RevokeController {
@RequestMapping(value = "/oauth/session/revoke", method = RequestMethod.GET)
public void revoke(HttpServletRequest request) throws InvalidClientException {
request.getSession().invalidate();
}
}
答案 1 :(得分:1)
这是正确的行为,当您从Angular应用程序注销时,它不会从Auth服务器注销。
示例: - 假设我们要使用google或facebook帐户登录stackoverflow.com,我们无需再次输入密码,我们登录Auth服务。
如果我们需要反复显示SSO登录,我们需要注销Angular UI和OAuth服务器。