是否可以使用用户和凭据(JWT)登录,而 Oauth2 可以使用 google 登录?

Posted

技术标签:

【中文标题】是否可以使用用户和凭据(JWT)登录,而 Oauth2 可以使用 google 登录?【英文标题】:It is possible to have sign in with user and credentials(JWT) and Oauth2 sign in with google? 【发布时间】:2021-12-23 04:15:58 【问题描述】:

我正在开发一个应用程序,现在在这个应用程序中我已经使用 JWT 开发了登录,现在我想使用 google 登录,我已经阅读了关于 oauth2 但我没有找到任何实现 oauth2 和 jwt 通用登录的教程。 在 springSecurity 我有这个配置


    @Autowired
    private MyUserDetailsService myUserDetailService;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception 
        auth.userDetailsService(myUserDetailService);

    

    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http.cors();
        http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and();
        http.authorizeRequests().antMatchers("/login").permitAll()
        .anyRequest().authenticated();
        http.addFilter(new JWTAuthenticationFilter(authenticationManager()));
        http.addFilter(new JWTValidationToken(authenticationManager()));
    

    @Bean
    public PasswordEncoder passwordEncoder() 
        return new BCryptPasswordEncoder();

生成和验证令牌,但如果我使用 oauth2 我没有令牌来验证它,那么我的令牌过滤器将发送错误。很多页面在他们的注册页面中都有用谷歌登录,我知道是可能的,但我不知道该怎么做。

感谢您的宝贵时间,对不起我的英语,这不是我的母语

【问题讨论】:

这样做javainuse.com/spring/boot-jwt 嗨@ArthurKlezovich,我已经阅读了这篇文章,但在那篇文章中解释了如何创建 jwt 身份验证,而不是 jwt 和 oauth2 身份验证。 请参阅参考文档中的JWT 以避免使用自定义过滤器。使用OAuth 2.0 Login 和JWT Login 样本作为参考点。 嗨@SteveRiesenberg,使用 JWT 是必要的自定义并创建多个过滤器来创建和验证令牌 @roberto @Toerktumlare 引用的内置过滤器称为BearerTokenAuthenticationFilter,可以配置为支持验证签名的 JWT。没有必要编写自定义过滤器。同样,请参阅参考文档中的OAuth 2.0 Resource Server JWT。 【参考方案1】:

您需要在客户端实现一个逻辑。 就像当 oauth2 登录发生并且您生成 jwt 令牌时,让客户端(这里指的是浏览器或应用程序)存储 jwt 并在后续请求中将其发送到后端,直到它过期并在 jwt 过期后进行 oauth2 登录。

这就是在客户端维护普通 jwt 令牌的方式。 如果需要,您可以从请求标头或 cookie 中提取 jwt

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

感谢贪吃猫的回答,我设法找到了如下解决方案:

使用2个端点,其中一个接收usernamepassword数据,另一个接收google access token

对于这两个端点,我返回 jwtToken 用于对这两个端点的 api 调用。

查看这个很酷的教程,在这个链接中很好地解释了这一点:JWT and Social Authentication using Spring Boot

【讨论】:

链接的博文包含使用 JWT 实施身份验证的不良做法,应将其删除。 Spring 完全内置了对处理 JWT 的支持,并且在 Spring Security 参考文档docs.spring.io/spring-security/site/docs/current/reference/… 中声明了如何实现它,该博客文章编写了自定义安全性,这又是一种不好的做法。 好的谢谢你的评论我会阅读信息并修改我的代码

以上是关于是否可以使用用户和凭据(JWT)登录,而 Oauth2 可以使用 google 登录?的主要内容,如果未能解决你的问题,请参考以下文章

LARAVEL WEB API 中的 JWT 或 OAuth 或两者

Next.js 使用 JWT 进行身份验证

处理被盗的 JWT?

Django JWT Auth 和 Vue:如何检查用户是不是登录 Vue?

如果生成了新的 JWT,如何使 JWT 过期

JWT登录验证