带有特定域的 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 安全性

Spring Boot 实现跨域的 5 种方式,总有一种适合你,建议收藏!!

带有用户名和密码的 Zonky + Spring Boot + Postgres + Flyway