使用 Apache Shiro 的 Restful Web 服务身份验证和授权
Posted
技术标签:
【中文标题】使用 Apache Shiro 的 Restful Web 服务身份验证和授权【英文标题】:Restful Web service Authentication and Authorization with Apache Shiro 【发布时间】:2014-07-17 09:14:46 【问题描述】:我能够通过使用 JDBC relam 的数据库使用 apache shiro 对基于 Web 的应用程序进行身份验证。此外,我还能够使用 Shiro-Filters 来授予对特定 web 资源或 http url 的访问权限,使用 web.xml 中的 Shiro 过滤器配置和 shiro.ini 中的配置。
现在,我也想为 Web 服务实现相同的功能。特别是,如果凭据有效,我希望用户点击登录 URL 以获取令牌。之后,必须根据用户的特定令牌验证对 Web 服务的所有连续请求。 我没有任何线索来实现这一点。任何建议、程序或暗示性链接都可以帮到我很多!!
【问题讨论】:
【参考方案1】:我建议你使用jersey web 框架,因为它非常简单,用 java 和注释!
如你所知,你在 shiro.ini 中指定你的 uri、角色、权限,然后在 jersey 上创建一个 web 项目。
之后在java代码中的使用就简单明了!看看如何检索
球衣代码:
/**
* login to app
* @param username
* @param password
* @return
* since v0.6.4
*/
@PUT
@Path("login")
@Produces("application/json")
public Response loginv3(
@FormParam("username") String username,
@FormParam("password") String password)
return login(username, password);
在这种情况下,只有当用户连接并且我们具有“读者”角色时,我们才会检索书籍:
@GET
@Path("/books")
@Produces("application/json")
@RequiresUser
@RequiresRoles("reader")
真的很简单!请参阅 shiro 文档:shiro annotation reference
【讨论】:
您好,Jean 谢谢您的回复!当用户尝试访问获取书籍的服务时,他如何进行身份验证。如何让它知道这个特定用户已登录!当他获得令牌后通过不同的浏览器登录一次时。 用户通过 shiro 认证。请分叉shiro example app。请给我一些反馈! :) 谢谢 你不应该使用@QueryParam's 来传递用户和密码进行身份验证。我不能对这个答案投反对票,但这是一种不安全的方法。 你是对的@PabloAndrésMartínezVargas 我的错,我正在纠正它!【参考方案2】:这个机制是由shiro实现的,令牌被传递给浏览器,并作为cookie存储在客户端导航器上。之后,shiro 将通过浏览器将每个连接上的令牌传递给服务。
首先尝试将身份验证传播到您的应用程序中:authen shiro doc
请实现shiro Step by Step project 以验证身份验证和自动化的概念! :)
请给我一些反馈。享受它:)
【讨论】:
你能提供任何参考例子吗.. !! 请 git fork 这个项目:Shiro reference example GIT。给我一些反馈【参考方案3】:使用 shiro 的用户身份验证显示在 shiro example on GIT 中。只需 fork 这个 git 让它工作。
Shiro 正在传递一个 cookie 以保持连接有效! :) cookie 的传输是由 shiro 管理的,你不用想。
享受:)
【讨论】:
以上是关于使用 Apache Shiro 的 Restful Web 服务身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章
Spring MVC、RESTful 服务和 Apache Shiro 策略
如何使用 Apache Shiro 实现基于 JWT 令牌的身份验证机制?
Spring Cloud + Spring Boot + Mybatis + shiro + RestFul + 微服务
Spring Cloud + Spring Boot + Mybatis + shiro + RestFul + 微服务 技术分享