spring - 在AuthenticationProvider中成功认证后是否需要将原始凭据放入UsernamePasswordAuthenticationToken?
问题描述
我在入口处收到一个已经确认的用户 ID。我决定Authentication
为传入的 id -编写我的实现VkIdAuthentication
。然后执行AuthenticationProvider
那个接收VkIdAuthentication
然后找到UserDetails
并返回UsernamePasswordAuthenticationToken
。
但我没有用户提供的原始凭据。可以将 null 作为凭据UsernamePasswordAuthenticationToken
吗?
一条评论AbstractUserDetailsAuthenticationProvider
让我感到困惑:
// 确保我们返回用户提供的原始凭据, // 因此即使使用编码密码,后续尝试也会成功。
解决方案
从以下评论中发现:
更广泛地说:即使在会话经过身份验证之后,也许有身份验证提供程序确实需要凭据,或者可能存在其他用例,其中出于某些其他目的需要使用凭据,但是(从我天真的角度来看)似乎用户凭据身份验证成功完成后永远不需要,所以也许所有身份验证管理器都应该从身份验证实例中清除凭据,而不管涉及的令牌/提供者的类型如何?
从我在当前源代码中看到的内容来看,默认行为是即使您UsernamePasswordAuthenticationToken
从中返回一个,也会很快AbstractUserDetailsAuthenticationProvider
调用以再次将凭据设置为 NULL。UsernamePasswordAuthenticationToken#eraseCredentials()
因此,如果您在成功验证后不需要使用用户凭据,那么使用 NULL 凭据返回 Authentication 是相当安全的。
推荐阅读
- python - 为什么 unique() 返回相同的值?
- javascript - 反应登录/注册表单切换问题
- python - 调用 GetSecretValue 操作时发生错误(UnrecognizedClientException):请求中包含的安全令牌无效
- php - 登录页面 Codeigniter 3
- django - django RecursionError:调用 Python 对象时超出最大递归深度
- batch-file - ffmpeg 在尝试处理之前检查文件是否存在
- vb.net - VB:从控制台更改为表单使左侧功能停止工作
- apache-tomee - TomEE中的数据源密码加密和解密
- python - 如何在运行时从python中的输入字符串定义函数?
- html - 允许元素溢出溢出:隐藏容器