我在入口处收到一个已经确认的用户ID。我决定为传入ID-Authentication
编写VkIdAuthentication
的实现。实施AuthenticationProvider
的过程是接收VkIdAuthentication
然后找到UserDetails
并返回UsernamePasswordAuthenticationToken
。
但是我没有用户提供的原始凭据。可以将null作为UsernamePasswordAuthenticationToken
的凭据吗?
AbstractUserDetailsAuthenticationProvider
中的一条评论使我感到困惑:
//确保我们返回用户提供的原始凭证, //因此,即使使用已编码的密码,后续尝试也会成功。
答案 0 :(得分:4)
摘自this处的以下注释:
更广泛地讲:也许确实有需要身份验证的提供程序 凭证,即使会话已通过身份验证,或者 在其他一些用例中,需要具有凭据 出于其他目的,但是(从我的幼稚角度来看) 身份验证后,永远不需要用户凭据 成功完成,所以也许所有身份验证管理器都应该 清除身份验证实例中的凭据,无论 涉及的代币/提供者类型?
根据我在current source codes中看到的内容,默认行为是即使您从Promise.all
返回一个UsernamePasswordAuthenticationToken
,它也会很快调用AbstractUserDetailsAuthenticationProvider
来设置凭据再次为NULL。
因此,如果您不需要在成功身份验证后使用用户凭据,则返回带有NULL凭据的身份验证是相当安全的。