小编And*_*reu的帖子

为什么Spring安全基于用户名而不是用户ID?

在Spring Security中,UserDetails使用用户名作为用户的标识符。我的用户模型有多种类型的标识,并且有多种身份验证方式(通过电子邮件、电话号码、Facebook 等)。

我用来AuthorizationServerEndpointsConfigurer配置我的 oauth2 端点。JdbcTokenStore存储user_name在数据库中,我需要存储的是userId. 我已经更改了JdbcTokenStore以满足我的需求,但我不明白为什么 spring 框架假设用户名是唯一标识符,我的应用程序甚至不使用用户名。

例如,TokenStoreinferfacefindTokensByClientIdAndUserName是基于用户名的,为什么不呢findTokensByClientIdAndUserId?如果我使用电子邮件或电话号码对用户进行身份验证,如何获取该用户的所有令牌?

我的用户模型示例:id, email, phone number, facebook_id, name。电子邮件、电话号码和 Facebook id 是可选的,只需其中之一。在这种情况下,用户名的最佳候选者是什么?我应该以 spring 抽象方式使用用户 id 作为用户名吗?

spring spring-security spring-boot spring-oauth2

6
推荐指数
1
解决办法
2571
查看次数