【发布时间】:2018-06-24 10:27:07
【问题描述】:
在 Spring Security 中,UserDetails 使用用户名作为用户的标识符。我的用户模型有多种类型的标识和多种身份验证方式(通过电子邮件、电话号码、Facebook 等)。
我正在使用AuthorizationServerEndpointsConfigurer 来配置我的 oauth2 端点。 JdbcTokenStore 将user_name 存储在数据库中,我需要存储的是userId。我已经更改了JdbcTokenStore 来满足我的需求,但我不明白为什么spring 框架会假设用户名是唯一标识符,我的应用程序甚至不使用用户名。
例如,在TokenStore 中推断findTokensByClientIdAndUserName 是基于用户名的,为什么不是findTokensByClientIdAndUserId?如果我使用电子邮件或电话号码对用户进行身份验证,如何获取该用户的所有令牌?
我的用户模型示例:id、email、phone number、facebook_id、name。电子邮件、电话号码和 facebook id 是可选的,只需要其中之一。在这种情况下,用户名的最佳候选者是什么?我应该在 spring 抽象方式中使用用户 ID 作为用户名吗?
【问题讨论】:
标签: spring spring-boot spring-security spring-oauth2