Grails spring security如何在自定义身份验证中记住我?

Posted

技术标签:

【中文标题】Grails spring security如何在自定义身份验证中记住我?【英文标题】:How does Grails spring security rememberMe on custom auth? 【发布时间】:2012-12-14 18:30:52 【问题描述】:

我使用带有自定义身份验证方法的 grails spring security 进行 facebook 身份验证:

def auth() 
    ...

当我在浏览器中检查 cookie 时,我可以看到当浏览器会话关闭时 cookie 的生命周期已经结束。只有当我使用插件中的默认登录/身份验证操作时,才会设置持久的 rememberMe cookie。

我必须进行哪些更改才能使使用我的自定义身份验证方法登录的用户不会在会话之间注销?

为了重新认证,我使用:

def success() 

    // get facebook user data

    springSecurityService.reauthenticate username

    if(springSecurityService.loggedIn) 
            // do something

    

如何设置 rememberMe cookie?

【问题讨论】:

我觉得配置没问题。可能是因为您将浏览器 cookie 偏好设置为“一直保留到”您退出? 【参考方案1】:

想法:让spring security记住我服务知道它应该考虑登录成功。

    在您的 facebook 成功操作中,成功验证后,请执行以下操作:

    //wire remember me services
    def rememberMeServices
    
    //... in your action:
    springSecurityService.reauthenticate username
    
    def authentication = SecurityContextHolder.context.authentication
    rememberMeServices.loginSuccess(request, response, authentication)
    

    在您的 Config.groovy 中,添加以下内容

    grails.plugins.springsecurity.rememberMe.alwaysRemember = true
    

【讨论】:

【参考方案2】:

比较您提交的原始 auth.gsp 和您自定义的 auth.gsp 之间的请求的 POST 参数。将有一个额外的隐藏字段,这是缺失的。为此使用 Firebug。

【讨论】:

我看到在原始身份验证 POST 中设置了一个 grails_remember_me cookie。但是如何修改我的身份验证方法以使其也包含在内?有一个 POST 到 myurl.com/j_spring_security_check,参数为:_spring_security_remember_me=on j_password=user j_username=password 我如何修改我的身份验证方法来设置这个 cookie? 之后如何进行身份验证?你应该只发布到 j_spring_security_check servlet。如果要修改行为,则应更改配置或使用 DI 覆盖某些服务。见这里burtbeckwith.com/blog/files/1090/hacking_london.pdf 我更新了上面的帖子。有我的成功和注销操作。 1. 为了设置记住我的 cookie,我需要改变什么? 2. 为了让身份验证操作显示为弹出窗口,我需要做什么?感谢您的帮助。

以上是关于Grails spring security如何在自定义身份验证中记住我?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Security 时如何允许 CKEditor 在 Grails 中上传图像

Grails spring-security-oauth-google:如何设置

如何使用 spring-security-core-ldap 插件在 grails 中实现 LDAP 身份验证?

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

Grails Spring-Security - 如何比较密码-

如何在 Grails 和 AngularJS 上使用 Spring Security 进行 Ajax 登录