[英]Spring boot Security, Oauth2 logout, invalidate session in order to go through the authentication and approval cycle in the authorization server
[英]Spring Oauth2 SSO - Unable to logout from the Auth server
我使用@EnableOauth2Sso
遵循與Spring的oauth2教程中描述的架構類似的架構:身份驗證服務器,啟用sso的zuul代理,獨立的UI應用程序等。
Auth server ---- Resource Server (Zuul app) ---- Angular UI App
問題是,當UI針對資源服務器注銷時,它成功刪除了資源服務器JSESSIONID,然后將用戶重定向到主頁。 當用戶想要再次登錄時,他被重定向到身份驗證服務器,但是沒有詢問用戶+密碼,而是認為他仍在登錄。 身份驗證服務器JSESSIONID仍然存在,並且不受以前的資源服務器中斷的影響。
我如何也可以從身份驗證服務器注銷?
由於沒有開箱即用的Spring OAuth2 Single Logout,我們必須解決此問題,以創建一個/ revoke端點,該端點調用Auth Server從中注銷:
用戶界面:
$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();
}
}
這是正確的行為,當您從Angular應用注銷時,它不會從Auth服務器注銷。
示例:-假設我們要使用google或facebook帳戶登錄stackoverflow.com,我們不需要再次輸入密碼,我們要登錄Auth服務。
如果需要一次又一次顯示SSO登錄,則需要注銷Angular UI和OAuth服務器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.