Java实现Google授权登录,OAuth 2.0登录

这篇具有很好参考价值的文章主要介绍了Java实现Google授权登录,OAuth 2.0登录。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

首先创建OAuth 2.0 客户端 ID
Java实现Google授权登录,OAuth 2.0登录,java,状态模式,开发语言
配置url,必须是https的,同时复制好客户端id 和密钥

Java实现Google授权登录,OAuth 2.0登录,java,状态模式,开发语言
配置回调url
Java实现Google授权登录,OAuth 2.0登录,java,状态模式,开发语言

    /**
     * Google授权登录跳转。但是会重定向,建议前端跳转
     *
     * 前端js
     * // 构建 Google 授权 URL
     * const authParams = new URLSearchParams({
     *   response_type: 'code', //固定
     *   client_id: 'YOUR_CLIENT_ID', // 请将 YOUR_CLIENT_ID 替换为实际的客户端 ID
     *   scope: 'openid email profile',  //固定
     *   redirect_uri: 'YOUR_REDIRECT_URI', // 在Google配置的回调url
     * });
     *
     * const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?${authParams}`;
     *
     通过Java接口跳转Google登录页面,会重定向,建议前端跳转
     * @param response
     * @return
     * @throws IOException
     */
    @GetMapping("/google-login")
    @NoAuth
    public CommonResult<String> googleLogin(HttpServletResponse response) throws IOException {
        HttpTransport httpTransport = new NetHttpTransport();
        JsonFactory jsonFactory = GsonFactory.getDefaultInstance();

        // 设置 OAuth 2.0 授权码流对象
        AuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                httpTransport, jsonFactory, CLIENT_ID, CLIENT_SECRET, SCOPES)
                .setAccessType("offline")
                .setApprovalPrompt("force") // 可选,强制用户重新授权
                .build();

        // 生成用户授权的 URL
        AuthorizationCodeRequestUrl authorizationUrl = flow.newAuthorizationUrl()
                .setRedirectUri(REDIRECT_URI);

        // 重定向用户到授权 URL
        response.sendRedirect(authorizationUrl.build());
        return new CommonResult("success");
    }

回调接口文章来源地址https://www.toymoban.com/news/detail-631809.html

 @GetMapping("/google-callback")
    @NoAuth //不需要登录
    public ResponseEntity<String> googleCallback(@RequestParam("code") String authorizationCode) throws IOException {
        System.out.println("google-callback code = "+authorizationCode);

        // 创建 Google 授权码流对象
        GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
                new NetHttpTransport(),
                JacksonFactory.getDefaultInstance(),
                CLIENT_ID,
                CLIENT_SECRET,
                Arrays.asList("openid", "email", "profile"))
                .setAccessType("offline")
                .build();

        // 交换授权码为访问令牌
        TokenResponse tokenResponse = flow.newTokenRequest(authorizationCode)
                .setRedirectUri(REDIRECT_URI)
                .execute();
        String accessToken = tokenResponse.getAccessToken();

//        System.out.println("google accessToken: "+accessToken);

        String userInfo = getUserInfo(accessToken);
//        System.out.println("userInfo: "+userInfo);
        /** 格式
         * {
         *   "iss": "https://accounts.google.com",
         *   "sub": "123456789012345678901",  表示用户的唯一标识符,通常是用户的Google ID。
         *   "aud": "your-client-id",
         *   "email": "user@example.com",
         *   "email_verified": true,
         *   "exp": 1627889766,
         *   "iat": 1627886166
         * }
         */
        JSONObject jsonObject = JSONObject.parseObject(userInfo);
        String email =  jsonObject.getString("email") ;
        //登录逻辑
        JSONObject userJson = loginByEmail(email);
        String redirectUrl = "https://funflixvideo.com/#/?userId="+userJson.getString("userId")+"&sessionId="+userJson.getString("sessionId");
        // 重定向到 H5 页面,并带上 session ID
        HttpHeaders headers = new HttpHeaders();
        headers.setLocation(URI.create(redirectUrl));
        return new ResponseEntity<>(headers, HttpStatus.FOUND);
    }
    
    //获取用户信息
 public  String getUserInfo(String accessToken) {

        String url = "https://www.googleapis.com/oauth2/v1/userinfo?access_token=" + accessToken;
        try {
            return HttpClient4Utils.httpGet(url, null, "utf-8", 30);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

到了这里,关于Java实现Google授权登录,OAuth 2.0登录的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OAuth 2.0 授权认证详解

    1.1 OAuth 2.0 应用场景 OAuth 2.0 标准目前被广泛应用在第三方登录场景中,以下是虚拟出来的角色,阐述 OAuth2 能帮我们干什么,引用阮一峰这篇理解OAuth 2.0中的例子: 有一个\\\"云冲印\\\"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让\\\"云冲印\\\"读取

    2024年02月04日
    浏览(30)
  • OAuth 2.0(Open Authorization 2.0)授权框架入门介绍

    OAuth 2.0-01-Overview OAuth2-02-java 整合 OAuth2-03-springboot 整合 OAuth 2.0(Open Authorization 2.0)是一种授权框架,允许第三方应用程序访问用户在另一个服务提供者上托管的资源,而无需共享用户的凭据(例如用户名和密码)。 它已成为许多网络服务的标准授权协议,包括社交媒体平台

    2024年04月08日
    浏览(43)
  • Spring Boot 最新版3.x 集成 OAuth 2.0实现认证授权服务、第三方应用客户端以及资源服务

    Spring Boot 3 已经发布一段时间,网上关于 Spring Boot 3 的资料不是很多,本着对新技术的热情,学习和研究了大量 Spring Boot 3 新功能和新特性,感兴趣的同学可以参考 Spring 官方资料全面详细的新功能/新改进介绍 Spring 版本升级到6.x JDK版本至少17+ … 新特性有很多,本文主要针对

    2024年02月02日
    浏览(73)
  • 实现 Google 第三方授权登录

    最近做项目要实现Google的第三方登录,这简单的记录一下。 目前Google的第三方登录有很多方案,且官方提供SDK方便接入。但是我这个项目同时要实现网页和客户端。所以选择了 Google OAuth 2.0 的方案。 当然,也可以 《实现 Facebook 第三方授权登录》 Google 的 OAuth 2.0 流程 首先

    2024年02月09日
    浏览(44)
  • oauth2.0第2季 分布式认证与授权实现单点登录

    1.使用jwttoken进行令牌传输,资源服务器在本地怎么验证token? 1.1.1 oauth是什么 1.1.2 oauth的角色 1.1.3 oauth的认证流程 1.1.4 oauth的4种模式 1.介绍单体架构  使用sesion保存会话信息的情况 2.前后端分离项目,调用方式 session架构不适合前后端分离项目 3.解决办法,引出oauth2.0 配置

    2024年02月11日
    浏览(45)
  • 【授权与认证】OAuth 2.0 和 OIDC 的异同点

    开发者谈 | OAuth 2.0 和 OIDC 协议的关系?(内含必看案例) 【Web 安全】CSRF 攻击详解 OAuth 2.0 的一个简单解释 OAuth 2.0 的四种方式 什么是Oauth2.0,Oauth2.0的四种授权模式 简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系

    2024年01月17日
    浏览(34)
  • H5使用微信OAuth2.0授权登录,并实现内网调试。

    H5实现微信授权登录的流程不在过多赘述官方文档传送门,下面直接上如何在开发状态下实现授权登录调试。 微信公众号的开发权限,配置后续会讲。 内网穿透工具。 一个node服务点这里koa2快速搭建,传送门。 如图所示点击网页授权域名设置 将这个文件txt下载到本地,下面

    2024年02月16日
    浏览(42)
  • 基于Next14+Auth5实现Github、Google、Gitee平台授权登录和邮箱密码登录

    后面打算自己做一个独立产品,产品需要用到服务端渲染,而我比较擅长React,所以最近在学Next14。 刚开始学的时候,因为自己英文不好,中文文档又特别少,踩了不少坑。后面买了冴羽大佬的Next小册跟着学习,很快就上手了,小册质量很高,个人觉得很适合新手入门。 学

    2024年04月15日
    浏览(44)
  • 微信小程序——单点登录,OAuth 2.0,openid

    单点登录 (Single Sign-On,简称SSO)是一种身份认证的机制,允许用户在多个应用程序之间只需进行一次登录,即可访问所有相互信任的应用程序,而无需再次输入用户名和密码。SSO可以提供更好的用户体验和简化的身份验证流程。 OAuth 2.0 是一种开放标准的授权协议,用于授

    2024年02月07日
    浏览(45)
  • java实现状态模式

    状态模式是一种行为设计模式,它允许对象在内部状态改变时改变其行为。在状态模式中,对象将其行为委托给表示不同状态的状态对象,这些状态对象负责管理其行为。以下是在 Java 中实现状态模式的一般步骤: 创建一个状态接口(State):该接口定义了具体状态类必须实

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包