簡體   English   中英

Spring Oauth2 SSO-無法從Auth服務器注銷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM