我是Shiro的新手。我们正试图用Stormpath来使用Shiro。我一直试图剖析这些例子,想出解决方案,但到目前为止我还没有成功。
目前,我只是尝试创建REST服务来做我想做的事情,并且我将在以后绑定一个真正的客户端。这就是我试图实现的第一步:
我希望客户端在我的服务器上点击REST端点(登录)。我的服务器将进行身份验证,并将JWT返回给客户端。然后,此JWT将用于访问我的服务器上的安全端点。 (我编写了可以成功验证Stormpath的Java代码。)
我的问题是JWT。我预计会为我创建一个JWT,或者至少可以轻松访问。我无法找到一种方法来获得一个。我已经看到了如何构建一个示例代码,但这看起来并不像我期望的那样。
我已经完成了几个例子,但大多数似乎都在处理JSP接口,而我似乎无法实现我想要做的事情。
这种方法合理吗?任何指导都表示赞赏。
修改1
我现在有一个Java客户端,可以使用Shiro servlet进行身份验证并检索JWT。我将此作为GlassFish中的已部署应用程序(战争)运行。我的下一步是使用该JWT对具有我的REST端点的不同应用程序进行身份验证。这个REST应用程序不需要知道如何进行身份验证 - 我只想在调用时将JWT传递给给定的REST端点并使用Shiro(通过注释)来控制对端点的访问(如果是确实可能)。我能找到的所有例子似乎都是"一体化"示例(使用Shiro / Stormpath配置捆绑JSP等)。我正在尝试确定保护REST端点的最低工作配置,而且我很难确定我需要哪些配置。
修改2
我正在使用Stormpath-Shiro-Servlet(从Shiro Servlet示例中窃取)作为我的身份验证后端。使用我的Java客户端,我向servlet发送一个登录请求,我确实回到了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.
首先,我不明白为什么servlet登录'并没有真正登录我并给我非匿名原则?其次,我试图在一个单独的客户端上做所有事情,所以我无法访问Subject.login(这是一个正确的假设吗?)。
答案 0 :(得分:2)
Stormpath API为您管理JWT创建。如果您启动其中一个示例(上面的servlet或spring-boot-web示例),则在登录后,您将拥有一个JWT cookie。 this blog post中有背景信息。
我正在努力发布strompath-shiro,但我想在这里包含这些链接,这样你就可以开始寻找了。