带有特定域的 Spring Boot 的 Google 社交登录
Posted
技术标签:
【中文标题】带有特定域的 Spring Boot 的 Google 社交登录【英文标题】:Google Social SignIn with Spring Boot with Specific Domain 【发布时间】:2017-11-06 05:11:49 【问题描述】:我正在将 Google+ 登录与 Spring Social & Boot 集成。
但是它允许我使用@gmail.com
域登录,但现在我只想为组织设置登录选项。即username@googledomain.com
我们如何为 Spring Social 添加特定的域名验证?
【问题讨论】:
【参考方案1】:当您实现自己的登录适配器时,您可以选择从身份提供者那里获取用户配置文件,并且您可以验证电子邮件地址。此处的返回字符串表示要重定向到的 URL,因此当他们的电子邮件地址与域不匹配时,您可以将他们重定向到错误页面而无需登录。
@Component
public class SocialSignInAdapter implements SignInAdapter
private final UserDetailsTransformer userDetailsTransformer;
@Autowired
public SocialSignInAdapter(UserDetailsTransformer userDetailsTransformer)
this.userDetailsTransformer = userDetailsTransformer;
@Override
public String signIn(String localUserId, Connection<?> connection, NativeWebRequest request)
if (connection.fetchUserProfile().getEmail().matches("^.*@googledomain.com$"))
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(
userDetailsTransformer.convert(connection), null,
Arrays.asList(new SimpleGrantedAuthority(String.format("%s_USER", connection.getKey().getProviderId())))));
return "/";
else
return "/some-error-page";
【讨论】:
感谢您的回复。我会检查并告诉你:) 我有一个正在进行的项目,其中包含 Spring Social,所以我在那里进行了测试。解决方案可能比这个小。 我已经尝试过这个解决方案,但问题是我想在登录谷歌之前验证电子邮件地址!我们可以在谷歌域端设置一些验证吗? 如果您可以调整 spring social 以使用它,这可能会有所帮助:developers.google.com/identity/protocols/OpenIDConnect#hd-param 我已经检查了这个参数“HD”,但就我检查代码而言,Spring Social 没有提供任何提供 HD 参数的工具。以上是关于带有特定域的 Spring Boot 的 Google 社交登录的主要内容,如果未能解决你的问题,请参考以下文章
带有 Spring Boot 的 CORS - 将 GET 请求限制到某些域
Java Spring Boot 加 Spring Batch 创建 Jar 并仅运行特定作业
带有嵌入式 Tomcat 的 Spring Boot 忽略了方法角色
带有用户和角色的 Kotlin 中的 Spring Boot 安全性