2016-09-08 5 views
2

나는 Shiro를 처음 사용합니다. 우리는 시로를 폭풍우와 함께 사용하려고 시도하고 있습니다. 나는 내가하고 싶은 일에 대한 해결책을 제시하기 위해 예제를 분석하려고 노력해 왔지만 지금까지 성공하지 못했습니다.Shiro/Stormpath from REST

지금은 단순히 내가 원하는 것을 수행하기 위해 REST 서비스를 만들려고하고 있으며 나중에 실제 클라이언트를 묶을 것입니다. 이것은 내가 첫 단계로 달성하고자하는 것입니다 :

내 서버에서 클라이언트가 REST 엔드 포인트 (로그인)를 사용하게하고 싶습니다. 내 서버가 인증을 받고 JWT를 클라이언트에 반환합니다. 이 JWT는 내 서버의 보안 된 엔드 포인트에 액세스하는 데 사용됩니다. (Stormpath에 대해 성공적으로 인증 할 수있는 Java 코드를 작성했습니다.)

내 문제는 JWT입니다. 나는 JWT가 나를 위해, 또는 적어도 쉽게 접근 할 수있을 것으로 기대했다. 나는 길을 찾을 수 없습니다. 하나를 만드는 방법에 대한 샘플 코드를 보았습니다. 그러나이 코드를 얻으려는 방식처럼 보이지 않습니다.

저는 몇 가지 예제를 실행했지만 대부분 JSP 인터페이스를 처리하는 것처럼 보입니다. 그리고 내가하려고하는 것에 도약을 할 수없는 것처럼 보입니다.

이 접근 방법이 합리적입니까? 모든 지침을 부탁드립니다.

편집 한

나는 지금 시로 서블릿을 사용하여 인증하고 JWT를 검색 할 수있는 Java 클라이언트가 있습니다. GlassFish에서 배포 된 응용 프로그램 (war)으로 실행됩니다. 내 다음 단계는 JWT를 사용하여 다른 REST 엔드 포인트가있는 애플리케이션에 대해 인증하는 것입니다. 이 REST 애플리케이션은 인증 방법에 대해 알 필요가 없다. 주어진 REST 엔드 포인트에 대한 호출에서 JWT를 전달하고 Shiro (주석을 통해)를 사용하여 엔드 포인트에 대한 액세스를 제어하려고한다 (실제로 가능하다면). 내가 찾을 수있는 모든 예제는 "올인원"예제 (Shiro/Stormpath 구성 등으로 JSP 번들링)입니다. REST 엔드 포인트를 보호하기위한 최소 작업 구성을 결정하려고하는데 필요한 구성을 결정하는 데 어려움이 있습니다.

편집 2

내 인증 백 - 엔드로 Stormpath-시로 서블릿을합니다 (시로 서블릿 예제에서 도난으로) 사용하고 있습니다. Java 클라이언트를 사용하여 서블릿에 로그인 요청을 보내고 있으며 실제로 JWT를 다시 얻고 있습니다. 그러나 JWT를 사용하여 다른 나머지 자원에 액세스 할 수 없습니다. 내 나머지 통화는이 오류가 발생할 수 : 서블릿 '로그인'실제로 저를 기록하고 나에게 익명이 아닌 원칙을 포기하지 않는 이유

org.apache.shiro.authz.UnauthenticatedException: This subject is anonymous - it does not have any identifying principals and authorization operations require an identity to check against. A Subject instance will acquire these identifying principals automatically after a successful login is performed be executing org.apache.shiro.subject.Subject.login(AuthenticationToken) or when 'Remember Me' functionality is enabled by the SecurityManager. This exception can also occur when a previously logged-in Subject has logged out which makes it anonymous again. Because an identity is currently not known due to any of these conditions, authorization is denied.

첫째, 이해가 안 돼요? 둘째, 별도의 클라이언트에서 모든 작업을 수행하려고하므로 Subject.login에 액세스 할 수 없습니다 (올바른 가정입니까?).

+0

귀사의 요청은 어떻게 되나요? 그것을 포착하고 여기에 게시 할 수 있습니까 (필요시 검열) 할 수 있습니까? –

+0

나는 다시 붙어있다. 나는/login과/oath/token 둘 다에서 서블릿을 치고있다. 나는 답장을 얻었고 Stormpath 계정 URI가 정확하다는 의미에서 문제가 없다. 계정 URI가 Stormpath 서버에서 반환되어야하므로 내 구성이 올바르다 고 가정합니다. 그러나 나는 어떤 집단이나 주장도 보지 못한다. JWT 디버거와 JWT Analyzer 및 Inspector를 사용하여 JWT를 검사했습니다. 그게 요인이라면'stormpath.web.oauth2.authorizer.secure.resolver = com.stormpath.sdk.servlet.config.SecureResolverFactory'가 설정되어 있습니다. –

답변

2

는 JWT 생성이 Stormpath API에 의해 당신을 위해 관리 github/stormpath-shiro

에서 this example를 살펴 보자. 위의 서블릿 중 하나 또는 spring-boot-web 예제 중 하나를 시작하면 로그인 후에 JWT 쿠키가 생성됩니다. 배경 정보는 this blog post입니다.

저는 지금 strompath-shiro를 공개하고 있습니다.하지만이 링크를 여기에 포함 시키면 시작할 수 있습니다.

+0

둘 다 보았습니다. 블로그 게시물은 "내 자신의"JWT 솔루션을 굴려야한다고 생각한 이유 중 하나였습니다. 예제와 관련하여, 나는 성공하지 않고 그것을 작동 시키려고 노력했다. java.lang.IllegalStateException가 발생했습니다 : 애플리케이션의 구성에 stormpath.application.href 속성이 정의되어 있지 않습니다. '환경 변수를 설정하고, Maven/Jetty에 변수를 설정하고, stormpath.properties 파일을 추가하려했지만 성공하지 못했습니다. –

+0

많은 디버깅 후 예제 응용 프로그램을 작동시키는 유일한 방법은 기본 "Stormpath"응용 프로그램이 아닌 다른 Stormpath에 하나의 응용 프로그램 만있는 것입니다. –

+0

@ ben_979 이것은 버그 일 수 있습니다. 응용 프로그램 'href'를 지정하면 많은 응용 프로그램 중 하나를 선택할 수 있습니다. github/stormpath-shiro에서 신고 할 수 있습니까? –