没有数据库实现的 Grails Security

Posted

技术标签:

【中文标题】没有数据库实现的 Grails Security【英文标题】:Grails Security without database implementation 【发布时间】:2013-01-11 12:59:48 【问题描述】:

我正在使用 Grails 2.2.0 开发一个 Web 应用程序,它通过调用另一个后端服务器的已实现 API 执行所有操作。这意味着,所有的事情,甚至是身份验证和所有相关的事情,都是通过 API 和相应的后端服务器完成的。

现在我想使用 SpringSecurity 或 Apache Shiro 插件进行身份验证和角色管理等,但我遇到的所有这些都是使用与数据库相关的 domain 类,这不是我想要的要做...是否有可能在没有数据库连接的情况下使用这些插件中的任何一个而无需高度自定义它们?或者是否有另一个我不知道的插件可以带来我需要的“无忧”功能?

我希望问题本身足够清楚,否则请不要犹豫,向我询问进一步/更好地解释我的问题:)

【问题讨论】:

【参考方案1】:

Apache Shiro 插件不会强制您使用域类或数据库。 您可以拥有一个Shiro Realm(将其放在 grails-app/realms 中),它将身份验证和授权委托给后端服务器。这应该是这样的:

class BackendServerRealm 
   def authenticate(authToken) 
       // call backend authentication with credentials from authToken
       def user = backednService.authenticate(authToken.username, authToken.password)
       ...
       new SimpleAccount(user.username, user.password, "BackendServerRealm")
   

Shiro 只是为您提供执行身份验证和授权的基础架构,但您可以很容易地插入自己的实现

【讨论】:

感谢 Shiro @drorb 的建议 - 但我决定使用 Spring Security Plugin ;)【参考方案2】:

Spring Security Core 插件默认使用域类和数据库,但使用自定义 UserDetailsService 实现很容易自定义用户和角色数据的来源。上面有一个whole chapter in the docs。

我还讨论了自定义插件,并包含了一个自定义身份验证提供程序的示例。有一个示例应用程序和讲座视频的链接here。

【讨论】:

非常感谢您的博文和您(非常有趣!)谈话的链接——我现在已经完成了,我真的很想尝试使用 Spring Security 插件来实现;) 我现在已经完成了 bove,我真的很想尝试使用 Spring Security 插件来实现;)但是,一如既往,我对这个 g 有几个问题 我想知道的第一件事是,如果有必要,用户凭据(用户名、密码)的身份验证必须在我的 Grails 项目中吗?我只是问,因为所有身份验证都是通过我的项目中的后端完成的,我不想存储给定密码的时间超过必要的时间...... Spring Security 不关心数据来自哪里。如果创建自定义 Provider,您只需为自定义 UserDetailsS​​ervice 或 Authentication 创建一个有效的 User 实例。 非常感谢 - 我目前正在研究它 - 看起来很有希望 ;)

以上是关于没有数据库实现的 Grails Security的主要内容,如果未能解决你的问题,请参考以下文章

grails spring-security-oauth-facebook:0.2

Grails Spring Security 最大并发会话

如何为登录GRAILS(Spring security)的用户实现会话?

Grails + Spring Security:无法登录

没有管理器的 Grails Spring Security Ldap

如何在 grails 和现有 oauth2 提供程序中使用 Spring Security 实现基于表单的登录