2017-05-04 7 views
0

OpenID provider으로 구성된 WAS Liberty 서버가 있습니다. 그런 다음 REST API 끝점을 많이 사용하는 Angular 응용 프로그램이 있습니다. 토큰이 만료 된 후 처음으로 응용 프로그램을 열거 나 열 때 모든 것이 정상입니다. WAS가 OpenID 공급자로 리디렉션 한 다음 OpenID로 정의되고 openidConnectClient-1.0 구현에 의해 지원되는 일반 흐름으로 리디렉션됩니다.openidConnectClient-1.0 기능을 사용하는 OpenID 프로토콜 및 REST API 끝점을 사용하는 각도 응용 프로그램을 이해할 수 없습니다.

그러나 다음과 같은 유스 케이스에주의해야합니다. 응용 프로그램이 열려있는 동안 토큰이 만료되었으며 사용자가 응용 프로그램을 다시로드하지 않고 GET 또는 POST 요청을 실행합니까? 현재 WAS는 리디렉션을 수행하기 때문에 정규 응답과 리디렉션 (둘 다 반환 상태 200)을 구분할 수 없습니다.

제가 생각하는 유일한 해결책은 Websphere에게 일부 끝점에서는 리디렉션을 수행하지 말고 401/403 오류를 반환하는 것입니다. 따라서 클라이언트 측의 응답 코드를 모니터링하고 그에 따라 수행 할 수 있습니다. 성취 할 수 있습니까? 아마도 제가 알지 못했던 또 다른 해결책이 있을까요?


업데이트는 :

<authFilter id="testFilter"> 
     <webApp id="simple" matchType="contains" name="simple"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/basic"/> 
     <requestUrl id="excludeUrl1" matchType="notContain" urlPattern="/api"/> 
    </authFilter> 

하지만 바로이 방법에 두 가지 단점을 참조하십시오 :

    나는이 작성한 후에 내가 좋아하는 뭔가를 정의 즉, Authentication Filters 사용에 대한 생각
  1. 앱의 로직을 server.xml과 앱 자체의 두 개의 다른 위치에서 관리합니다. 그것은 응용 프로그램 유지 보수가 매우 번거로울 것입니다.
  2. Authentication Filters의 성질로 인해 로그인을 수행하기 위해 다른 registry으로 대체됩니다. 잠재적으로 보안 결함 일 수 있습니다.

업데이트 2 : 위의 솔루션이 작동하지 않습니다. 서버가 401 헤더를 www-authenticate 헤더와 함께 반환하면 브라우저에 기본 인증 팝업이 표시됩니다. 아래의 제안 된 해결책을 참조하십시오.

답변

0

이 문제를 해결하기 위해 응답 내에서 다음 헤더가 있는지 확인하는 Angular's Interceptors을 사용했습니다. no-cache, no-store, must-revalidate, private, max-age=0. 세션이 응답 내에서 지속되면 해당 세션이 만료되었으며 내 응용 프로그램을 다시로드하는 것으로 나타납니다.

리로딩하는 동안 자유가 스스로 SSO 공급자로 리디렉션합니다. 또 다른 해결책은 응답에서 리디렉션 URL을 추출하여 수동으로 리디렉션하는 것입니다.