在Spring Security中,UserDetails使用用户名作为用户的标识符。我的用户模型有多种类型的标识,并且有多种身份验证方式(通过电子邮件、电话号码、Facebook 等)。
我用来AuthorizationServerEndpointsConfigurer
配置我的 oauth2 端点。JdbcTokenStore
存储user_name
在数据库中,我需要存储的是userId
. 我已经更改了JdbcTokenStore
以满足我的需求,但我不明白为什么 spring 框架假设用户名是唯一标识符,我的应用程序甚至不使用用户名。
例如,TokenStore
inferfacefindTokensByClientIdAndUserName
是基于用户名的,为什么不呢findTokensByClientIdAndUserId
?如果我使用电子邮件或电话号码对用户进行身份验证,如何获取该用户的所有令牌?
我的用户模型示例:id
, email
, phone number
, facebook_id
, name
。电子邮件、电话号码和 Facebook id 是可选的,只需其中之一。在这种情况下,用户名的最佳候选者是什么?我应该以 spring 抽象方式使用用户 id 作为用户名吗?