用于 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 凭据的安全性的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apache Camel 和 Jetty 创建 REST 微服务
ASP.Net Web API 与 WCF - Web API 能否用于向单例 WCF 服务提供基于 REST 的通信?