用于 Rest 服务的基于 Apache Shiro 凭据的安全性

Posted

技术标签:

【中文标题】用于 Rest 服务的基于 Apache Shiro 凭据的安全性【英文标题】:Apache Shiro credentials based security for Rest service 【发布时间】:2014-04-27 01:14:53 【问题描述】:

我正在创建一个使用 Shiro 作为安全框架的应用程序。 该应用程序有两个部分;网络和休息。

Web 使用 Shiro 的默认 FormAuthenticationFilter。 我对基于会话的方法感到满意。

使用 Rest 的独立应用程序,我想限制使用 FormAuthenticationFilter 和创建会话,我可以通过 shiro.ini 文件执行此操作

我需要在其余服务上实现基于凭据的安全性。

在网上浏览时,我看到一些博客建议您创建自己的 Realm 和过滤器来处理这种情况。但没有关于如何执行此操作的详细信息。

是否可以在 Apache Shiro 上实现基于凭据的安全性?如果有,是否有博客或教程向您展示如何实现这一目标?

问候

【问题讨论】:

你能分享一个代码仓库吗? 【参考方案1】:

您可以对 Web 服务端点使用基本身份验证,并为 Web 使用基于表单的身份验证。

网络用户是否也可以访问您的网络服务?

编辑:

查看此示例应用。 https://github.com/dominicfarr/skybird-shiro

在shiro中配置了三个url路径

web - 使用表单身份验证。

api - 使用基本身份验证。

球衣 - 匿名访问。

切入 shiro.ini 配置。

[main]
authc.loginUrl = /web/login.html

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
sessionDAO = org.apache.shiro.session.mgt.eis.EnterpriseCacheSessionDAO

securityManager.sessionManager = $sessionManager
securityManager.sessionManager.sessionDAO = $sessionDAO


[users]
dom = password, user

[roles]
user = standard

[urls]
/web/login.html = authc
/web/** = authc
/api/** = authcBasic
/jersey/message = anon

【讨论】:

嗨 dom farr,您是指 BasicHttpAuthenticationFilter 进行基本身份验证吗?是的,网络用户也可以使用 Rest 频道。目前我正在看。我也在使用 SSL,所以在使用 rest 时连接是加密的。 感谢您的应用。在调用 Rest 服务时,我希望它保持无状态(我正在阅读的良好做法),即不为正在登录的用户创建会话。我可以按照您上面所说的 authcBasic 使用。到目前为止,我的方法是在 Rest 上使用 /resources/** = ssl[8443],noSessionCreation,authcBasic。这意味着每个请求都会对其进行 Base64_encoded。有没有办法覆盖BasicHttpAuthenticationFilter 读取标头并对其进行解码的方式?想用我自己的密钥对其进行编码/解码。 我会添加另一个关于如何覆盖 BasicHttpAuthenticationFilter 的问题,因此答案不会混淆。但是是的,您可以覆盖 shiro 中的大多数内容。

以上是关于用于 Rest 服务的基于 Apache Shiro 凭据的安全性的主要内容,如果未能解决你的问题,请参考以下文章

Web服务框架发展与REST服务开发

如何使用 Apache Camel 和 Jetty 创建 REST 微服务

ASP.Net Web API 与 WCF - Web API 能否用于向单例 WCF 服务提供基于 REST 的通信?

用于 Xamarin 表单的 Rest + WCF 集成

REST式的web服务

服务注册与发现---eureka