使用 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 令牌的身份验证机制?

关于 RESTful 和 Shiro 集成的示例

RESTFul Shiro

Spring Cloud + Spring Boot + Mybatis + shiro + RestFul + 微服务

Spring Cloud + Spring Boot + Mybatis + shiro + RestFul + 微服务 技术分享