我正在开发 Grails 应用程序,并希望与自定义单点登录服务(不是 CAS,但类似)集成。我正在努力寻找我需要定制的所有部分来实现这一点。有人可以向我解释一下我需要使用什么来完成此任务吗?我已经阅读了有关插件的文档,但它假定我知道要覆盖哪些 bean 以及将所有需要的文件放在哪里。
我已经根据我在每一点下面的研究,引用了我认为需要做的事情。
操作顺序
1-用户请求安全内容(现在应用程序中的一切都是安全的)
我相信这个设置在 Config.groovy 文件中:
grails.plugins.springsecurity.rejectIfNoRule = true
grails.plugins.springsecurity.securityConfigType = "InterceptUrlMap"
grails.plugins.springsecurity.interceptUrlMap = [
'/**':['ROLE_ADMIN']
]
2- Spring Security 检查用户是否在身份验证服务提供的 cookie 中设置了特定值
我猜我需要创建一个身份验证过滤器,但我不知道把它放在哪里或它应该是什么样子。
- 如果他们不这样做,用户将被重定向到此自定义 SSO 服务,他们登录,一旦通过身份验证,用户将被重定向回我的应用程序(使用新的 cookie 集)
3- Spring 安全检查 cookie 值并根据自定义服务验证它(通过 HTTP POST)
根据一些研究,我认为我需要使用 PreAuthenticatedProcessingFilter,但我还没有找到任何关于如何执行此操作的示例。
4-自定义服务返回一系列名称/值对,然后需要在本地应用程序数据库中创建一个用户(或者如果他们的用户数据已经在数据库中,则更新“lastLoggedIn”的时间戳)
我相信这是在与 3 号相同的 PreAuthenticatedProcessingFilter 或 GrailsUserDetailsService 中完成的
5-用户的身份验证会在会话中缓存一段时间(6-8 小时),因此每次用户请求新资源时都不需要针对 SSO 服务进行重新验证。
我不确定这是否是固有的,或者我是否需要添加代码来执行此操作(并且还设置会话超时)