0

에서 로그 아웃 할 수 없습니다 : 인증 서버의 SSO, 분리 된 UI 응용 프로그램 등을 할 수있는 zuul 프록시봄 OAuth2를 SSO 봄의 <a href="https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/oauth2-vanilla" rel="nofollow noreferrer">oauth2 tutorial</a>에 설명 된 것과 유사한 아키텍처 다음 내가 <code>@EnableOauth2Sso</code>을 사용하고있는 인증 서버

Auth server ---- Resource Server (Zuul app) ---- Angular UI App 

문제는 UI가 리소스 서버에 대해 로그 아웃 할 때 리소스 서버 JSESSIONID를 성공적으로 삭제하면 사용자가 홈 페이지로 리디렉션된다는 것입니다. 사용자가 다시 로그인하려면 인증 서버로 리디렉션되지만 사용자 + 비밀번호를 묻는 대신 그는 아직 로그 된 것으로 간주합니다. 인증 서버 JSESSIONID는 여전히 존재하며 이전 Resource Server lougout의 영향을받지 않았습니다.

인증 서버에서 어떻게 로그 아웃 할 수 있습니까?

답변

0

우리가가/그것에서 로그 아웃하는 인증 서버를 호출 엔드 포인트를 취소 만들어이 문제를 해결했다 상자의 밖으로 봄 OAuth2를 단일 로그 아웃이 없기 때문에 :

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(); 
    } 
} 
0

정확한 동작이므로 각도 앱에서 로그 아웃하면 인증 서버에서 로그 아웃하지 않습니다.

예 : google 또는 facebook 계정을 사용하여 stackoverflow.com에 로그인하려고한다고 가정합니다. 비밀번호를 다시 입력 할 필요가 없습니다. 우리는 Auth 서비스에 로그인합니다.

SSO 로그인을 반복해서 표시해야하는 경우 Angular UI와 OAuth 서버를 모두 로그 아웃해야합니다.