【问题标题】:Shiro how to secure the data source passwordShiro如何保护数据源密码
【发布时间】:2021-04-07 11:13:13
【问题描述】:

我一直在使用 Zeppelin 探索 Apache Shiro,到目前为止,我已经能够使用 JdbcRealm 进行身份验证,但进展不顺利的一件事是将数据源密码以纯文本形式提供。

有没有办法避免这种情况?

我的 shiro.ini 看起来像:

[main]
dataSource                    = org.postgresql.ds.PGPoolingDataSource
dataSource.serverName         = localhost
dataSource.databaseName       = dp
dataSource.user               = dp_test
dataSource.password           = Password123

ps = org.apache.shiro.authc.credential.DefaultPasswordService
pm = org.apache.shiro.authc.credential.PasswordMatcher
pm.passwordService = $ps

jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealmCredentialsMatcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher


jdbcRealm.dataSource = $dataSource
jdbcRealm.credentialsMatcher = $pm


shiro.loginUrl = /api/login

[roles]

admin = *

[urls]

/** = authc

有没有办法避免以纯文本形式提供数据源密码 dataSource.password = Password123?

想提供如下内容: $shiro1$SHA-256$500000$YdUEhfDpsx9KLGeyshFegQ==$m+4wcq4bJZo1HqDAGECx50LcEkRZI0zCyq99gtRqZDk=

【问题讨论】:

    标签: apache-zeppelin shiro


    【解决方案1】:

    是的,有办法,但由于 shiro 需要知道密码的性质,仍然会在某处放置密码。

    为什么哈希不起作用

    你发布了

    类似:$shiro1$SHA-256[…]

    这是一个哈希,因此它是不可逆的。 shiro 无法使用此字符串登录数据源。

    容器管理的数据源

    此时我可以推荐的最佳方法是使用容器托管资源。在这种情况下,容器指的是(Web)应用服务器,例如 tomcat、OpenLiberty 或 Wildfly。

    对于您的用例,请尝试查看以下内容:

    1. 扩展org.apache.shiro.realm.jdbc.JdbcRealmAuthorizingRealm
    2. 将 JPA API 添加到您的模块并注入持久性上下文,如下所示:
    @PersistenceContext
    EntityManager entityManager;
    
    1. 覆盖方法
    • protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token)
    • protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals)

    …改为从您的托管数据源加载。

    这种方法的缺点:

    您刚刚将数据源登录委托给您的容器/应用程序服务器。服务器仍然面临同样的问题。例如。使用 OpenLiberty,您仍然需要在某处存储加密(未散列)密码的主密钥 and thus liberty will do exactly this

    使用其他配置源

    您也可以编写自己的environment loader,而不是使用shiro.ini 文件。您可以从受 IP 限制的 Web 服务或加密硬件设备请求该文件。

    始终是一个目标:限制环境

    您应该始终限制环境。 例如。创建一个可以安装但不能运行您的应用程序并且无法读取日志的用户(称为 setup-user 左右)。 创建另一个可以启动应用程序、读取但不能修改配置文件和写入日志的用户,称为运行用户。

    限制该系统上所有其他用户对配置和日志的访问。

    参与

    如果您有其他需求,欢迎在shiro mailing lists 讨论其他解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 2012-08-11
      • 2010-09-11
      相关资源
      最近更新 更多