如何从 Grails 中的 Spring Security 获取普通密码或解密密码?

     2023-02-27     278

关键词:

【中文标题】如何从 Grails 中的 Spring Security 获取普通密码或解密密码?【英文标题】:How to get plain password or decrypt password from Spring Security in Grails? 【发布时间】:2015-10-01 16:45:27 【问题描述】:

我在 Grails 应用程序中使用 Spring Security 插件。保存密码时,它在数据库中以加密格式保存。我想给它发送纯密码。如何得到它?

另一个 Android 应用程序使用我的 API。通过我的 API,我需要发送特定用户的密码。

【问题讨论】:

您不想发送纯密码(也不可能)。如果您有一个应用程序并且能够发送一个 plian 密码,我会将其标记为安全风险。允许重置密码。 Deinum...感谢您的回复...另一个应用程序使用了我的 API...对于该应用程序,进一步使用需要向该应用程序发送密码... @Visme 听 M. Deinum。只是不要存储纯文本密码,也不要到处发送。如果您需要重置密码,请生成一个新的一次性密码,将其发送给用户并让用户选择他们选择的新密码。这种方式对用户甚至对您来说都更好,因为如果您的用户数据库遭到破坏,攻击者将获得散列和加盐的密码,而不是真正的密码。 【参考方案1】:

如果您从 db 读取密码:当密码保存到数据库时,它们是 hashed 而不是 encrypted 和 the process involved in hashing is not reversible,所以简单的答案是:不,你不能。


您可以在将密码保存到数据库时使用加密(以便在遇到异常情况时可以解密它们)但这不是一个好主意,that is why hashing functions are preferred to encryption algorithm for saving passwords。


但如果您确实需要这样做并且知道如何处理风险,您可以拦截对user.save() 的调用,特别是拦截密码被编码的beforeInsert()beforeUpdate() 方法。

所以您的用户的beforeInsert()beforeUpdate() 方法将如下所示:

beforeInsert()

    ...
    yourApiService.sendPassword(password)
    ...
    password = securityService.encodePassword(password)
    ...




beforeUpdate()

    ...
    if(isDirty('password'))

        yourApiService.sendPassword(password)
        ...
        password = securityService.encodePassword(password)

    
    ...


【讨论】:

【参考方案2】:

如果您将某些 API 暴露给某些外部应用程序,我对您的建议是使用 spring security rest plugin。要开始使用 spring security rest,请查看greach2014 talk。

如果您仍然坚持使用纯文本密码,那么您不是唯一一个要求这样做的人,而是出于不同的意图。存储纯文本密码背后的唯一逻辑是调试 Spring Security 中的登录问题。它不适用于生产应用程序。其他人发布了similar question 来调试登录问题,Burt Beckwith(spring 安全插件的维护者)写了this blog。在这篇博客中,他解释了如何存储纯文本密码。

【讨论】:

如何使用 JOSSO 和 Spring Security 从 Grails 应用程序中的 LDAP 获取自定义属性?

】如何使用JOSSO和SpringSecurity从Grails应用程序中的LDAP获取自定义属性?【英文标题】:HowtogetcustompropertyfromLDAPinGrailsapplicationusingJOSSOandSpringSecurity?【发布时间】:2012-07-1208:45:45【问题描述】:我已经成功地将JOSSO和SpringSecurity应用... 查看详情

如何绕过grails中的spring security登录检查

】如何绕过grails中的springsecurity登录检查【英文标题】:howtobypassspringsecuritylogincheckingrails【发布时间】:2013-09-2013:06:23【问题描述】:我有控制器方法,它返回json数据并且没有安全检查逻辑。defgetJsonData()//returnjson我正在从另一... 查看详情

如何使 Grails Spring Security 2.0 中的登录/页面成为初始屏幕?

】如何使GrailsSpringSecurity2.0中的登录/页面成为初始屏幕?【英文标题】:Howtomakethelogin/pageinGrailsSpringSecurity2.0theinitalscreen?【发布时间】:2014-01-0918:52:53【问题描述】:我正在从grails2.2.2迁移到grails2.3.4以避免2.2.2中的错误,即spring... 查看详情

从 grails 应用程序中的自定义 groovy 文件加载 spring bean

】从grails应用程序中的自定义groovy文件加载springbean【英文标题】:Loadspringbeansfromcustomgroovyfilesingrailsapp【发布时间】:2014-07-2413:41:39【问题描述】:尝试从Grails2.3.7.中的自定义groovy文件加载springbean我知道这个问题之前已经被问... 查看详情

如何删除grails中的spring安全令牌?(代码片段)

这里举例如下:deftest()TokenStorageService.removeToken("sdfdasdsdse3we434434dfdsfdf")respond(data:"OK")请帮我!答案如果我们使用令牌存储JWT,我们无法删除令牌,但令牌存储GORM可能。试试这个效果很好。StringremoveAccessToken(Stringtoken)trytokenStorag 查看详情

如何从 Grails 中的控制器访问域属性?

】如何从Grails中的控制器访问域属性?【英文标题】:HowtoaccessdomainpropertiesfromacontrollerinGrails?【发布时间】:2010-10-2904:28:47【问题描述】:我有以下Grails域类:classProductStringnameFloatbasePriceCategorycategoryStringimage="default.jpg"staticconstra... 查看详情

如何从 grails 应用程序中的 sessionId 获取 HttpSession

】如何从grails应用程序中的sessionId获取HttpSession【英文标题】:HowtogetHttpSessionfromsessionIdingrailsapplication【发布时间】:2016-09-2411:59:09【问题描述】:我有grails应用程序,使用sessionRegistry我可以获得sessionId。现在,我如何从该session... 查看详情

气氛:如何从 Grails 中的 webSocket 连接获取登录用户?

】气氛:如何从Grails中的webSocket连接获取登录用户?【英文标题】:Atmosphere:HowtogetloggedinuserfromwebSocketconnectioninGrails?【发布时间】:2014-03-0504:40:27【问题描述】:我正在努力将WebSockets功能引入我的Grails应用程序。为此,我使用At... 查看详情

如何从grails中的控制器调用服务

】如何从grails中的控制器调用服务【英文标题】:howtocallservicefromcontrolleringrails【发布时间】:2011-09-0904:54:29【问题描述】:我有一个服务类,我试图在我的控制器中调用服务的方法,如下所示。classLogListControllerdefListLogDetails=pri... 查看详情

如何将 Spring Roo 或 Grails 项目从典型的 MVC 切换到 AJAX/JSON/REST

】如何将SpringRoo或Grails项目从典型的MVC切换到AJAX/JSON/REST【英文标题】:HowtoswitchaSpringRooorGrailsprojectfromtypicalMVCtoAJAX/JSON/REST【发布时间】:2012-02-1309:44:22【问题描述】:这似乎是一个奇怪的问题,但我试图了解将应用程序转换为... 查看详情

grails acegi 迁移到 spring-security-core

】grailsacegi迁移到spring-security-core【英文标题】:grailsacegimigrationtospring-security-core【发布时间】:2011-12-2410:58:05【问题描述】:我从acegi迁移到spring-security-core的过程很糟糕。当我尝试登录时,我不断收到以下错误:Thespecifieduserdom... 查看详情

如何从grails中的url中删除应用程序名称和端口?

】如何从grails中的url中删除应用程序名称和端口?【英文标题】:Howtoremoveappnameandportfromurlingrails?【发布时间】:2011-08-2419:09:09【问题描述】:而不是将我的应用部署到http://localhost:8080/myApp我想把它部署到http://localhost【问题讨论... 查看详情

如何从 grails 3.1.8 中的外部文件加载数据源配置?

】如何从grails3.1.8中的外部文件加载数据源配置?【英文标题】:Howtoloaddatasourceconfigurationfromexternalfileingrails3.1.8?【发布时间】:2018-03-0916:58:37【问题描述】:我正在编写一个grails3.1.8应用程序。我的数据源写在application.groovy文件... 查看详情

Grails + Spring Security Rest + 如何登录

】Grails+SpringSecurityRest+如何登录【英文标题】:Grails+SpringSecurityRest+Howtologin【发布时间】:2015-04-1310:27:33【问题描述】:我使用grails创建了一个示例rest应用程序,并使用springsecurityrest插件添加了一个安全性。我正在尝试使用其余... 查看详情

如何绕过 Grails 异常处理以使用 Spring Oauth2?

】如何绕过Grails异常处理以使用SpringOauth2?【英文标题】:HowcanIbypassGrailsexceptionhandling,inordertouseSpringOauth2?【发布时间】:2012-06-3023:49:29【问题描述】:我正在尝试将基于OauthforSpringSecurity的Oauth2客户端从普通Java/Spring移植到Grails... 查看详情

如何从android连接到spring websocket

】如何从android连接到springwebsocket【英文标题】:howtoconnecttospringwebsocketfromandroid【发布时间】:2017-02-2407:55:56【问题描述】:我正在使用grails3.1.1我已经尝试查找一些文档和问题,例如this。这是我在ChatController中的代码classChatContr... 查看详情

Grails,从 Acegi 升级到 Spring 安全插件

】Grails,从Acegi升级到Spring安全插件【英文标题】:Grails,upgradingfromAcegitoSpringsecurityplugin【发布时间】:2011-09-0606:53:37【问题描述】:昨天我开始将我们的Grails应用程序从Acegi插件0.5.2升级到Spring安全插件。我遇到了一些问题,也... 查看详情

如何有条件地跳过 Grails Spring Security 插件过滤器链中的 SecurityContextPersistenceFilter 过滤器

】如何有条件地跳过GrailsSpringSecurity插件过滤器链中的SecurityContextPersistenceFilter过滤器【英文标题】:HowtoconditionallyskiptheSecurityContextPersistenceFilterfilterinGrailsSpringSecuritypluginfilterchain【发布时间】:2015-07-2017:04:39【问题描述】:我... 查看详情