首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java 实现集成 Google 邮箱第三方登录实践

Java 实现集成 Google 邮箱第三方登录实践

原创
作者头像
Lorin 洛林
修改于 2024-10-20 14:29:25
修改于 2024-10-20 14:29:25
1.1K1
举报
文章被收录于专栏:其它其它

前言

  • Google OAuth 2.0 是其中一种常见的第三方登录方式,广泛应用于各类网站和应用程序。通过 Google OAuth 2.0,用户可以使用其 Google 账户轻松登录第三方网站,而不必创建额外的账户。本文将介绍如何集成 Google OAuth 2.0 服务,实现用户在第三方网站上的登录。

前期准备

配置客户端 ID 和重定向 URL

  • 访问 Google API Console 获取 OAuth 2.0 凭据。点击左侧边栏的“Credentials”选项,然后创建一个客户端 ID(OAuth client ID)。
  • 选择你的应用类型,可以选择 Web 站点、Android、或者 IOS 应用等,这取决于你的业务。接着在 “Authorized JavaScript origins” 这一栏目,填写你的网站域名即可,如果是本地调试的话,通常设置为http://localhost,如果有端口,加一个端口名,如 http://localhost:8000,这里的目的是让谷歌知道你网站托管的 HTTP 来源。然后在“Authorized redirect URIs”这一栏目,填写你的重定向地址,一般是你的后端登录路径。
  • 上文相关的选项都配置好以后,点击“CREATE”按钮来保存并生成客户端 ID(Client ID) 和客户端密钥(Client secret)。

配置 OAuth 权限请求页面

  • 点击左侧列表的“OAuth consent srceen” 选项,创建一个应用。
  • 填写应用的基本信息,比如名字、邮箱、域名等。这个页面的信息,会显示在弹出的确认授权登录框中,可帮助最终用户了解你是谁并与你联系。
  • 配置可访问的权限,将权限勾选后保存即可。
  • 添加测试账户,也就是在未正式上线之前,可以进行 OAuth 2.0 登录的邮箱账。

登录流程

前端演示代码

代码语言:html
AI代码解释
复制
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Google Login</title>
    <script src="https://apis.google.com/js/platform.js" async defer></script>
</head>
<body>
<h2>Google 登录示例</h2>
<button id="googleSignInButton">使用 Google 登录</button>

<script>
    document.getElementById('googleSignInButton').onclick = function () {
        // Google OAuth 2.0 URL
        const clientId = '994578547547-gc6XXXX0vp9hl.apps.googleusercontent.com';  // 替换为你的Google客户端ID
        const redirectUri = 'http://localhost:8000/api/google/login';  // 替换为后端的回调登录URI
        const scope = 'email profile';
        const responseType = 'code';

        const googleAuthUrl = `https://accounts.google.com/o/oauth2/v2/auth?client_id=${clientId}&redirect_uri=${redirectUri}&response_type=${responseType}&scope=${scope}`;

        // 重定向到 Google OAuth 2.0 授权页面
        window.location.href = googleAuthUrl;
    };
</script>
</body>
</html>

后端演示代码

  • Maven 依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-oauth2-client</artifactId> </dependency>
代码语言:Java
AI代码解释
复制
google:
  token-apply-url: https://oauth2.googleapis.com/token
  userinfo-url: https://www.googleapis.com/oauth2/v3/userinfo
  oauth2:
    client-id: 994578547547-gc6uXXXXjtpk0vp9hl.apps.googleusercontent.com
    client-secret: GOCSPX-nWFVXXXXFImvw3iHLNkR

@Api(tags = "谷歌服务相关请求")
@RestController
@RequestMapping("/api/google")
@RequiredArgsConstructor
public class GoogleController {

    @Value("${google.oauth2.client-id}")
    private String clientId;

    @Value("${google.oauth2.client-secret}")
    private String clientSecret;

    @Value("${google.token-apply-url}")
    private String tokenEndpoint;

    @Value("${google.userinfo-url}")
    private String userInfoEndpoint;

    private final RestTemplate restTemplate;
    private final TokenProvider tokenProvider;
    private final UserDetailsService userDetailsService;
    private final UserService userService;
    private final SecurityProperties properties;
    private final OnlineUserService onlineUserService;

    @AnonymousGetMapping("/login")
    public ResponseEntity<Object> handleGoogleLogin(@RequestParam("code") String authorizationCode, HttpServletRequest req) {
        // Step 1: 用授权码获取 Access Token
        MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
        params.add("client_id", clientId);
        params.add("client_secret", clientSecret);
        params.add("code", authorizationCode);
        params.add("redirect_uri", "http://localhost:8000/api/google/login");
        params.add("grant_type", "authorization_code");

        HttpHeaders headers = new HttpHeaders();
        headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);

        HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers);

        ResponseEntity<Map> response = restTemplate.postForEntity(tokenEndpoint, request, Map.class);
        String accessToken = (String) response.getBody().get("access_token");

        // Step 2: 用 Access Token 获取用户信息
        HttpHeaders userInfoHeaders = new HttpHeaders();
        userInfoHeaders.setBearerAuth(accessToken);
        HttpEntity<String> userInfoRequest = new HttpEntity<>(userInfoHeaders);

        ResponseEntity<Map> userInfoResponse = restTemplate.exchange(userInfoEndpoint, HttpMethod.GET, userInfoRequest, Map.class);
        Map<String, Object> userInfo = userInfoResponse.getBody();

        String googleId = (String) userInfo.get("sub");
        String email = (String) userInfo.get("email");
        String name = (String) userInfo.get("name");
        String picture = (String) userInfo.get("picture");
        
        // 用户登录逻辑、并返回用户信息、会话信息
    }
}

总结

  • 通过集成 Google OAuth 2.0 服务,第三方网站可以实现简单、快捷且安全的用户登录方式。OAuth 2.0 的流程保障了用户的隐私安全,不需要将敏感信息(如密码)提供给第三方应用。同时,使用 Google 登录可以减少用户的注册步骤,提升用户体验。

个人简介

👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.

🚀 我对技术的热情是我不断学习和分享的动力。我的博客是一个关于Java生态系统、后端开发和最新技术趋势的地方。

🧠 作为一个 Java 后端技术爱好者,我不仅热衷于探索语言的新特性和技术的深度,还热衷于分享我的见解和最佳实践。我相信知识的分享和社区合作可以帮助我们共同成长。

💡 在我的博客上,你将找到关于Java核心概念、JVM 底层技术、常用框架如Spring和Mybatis 、MySQL等数据库管理、RabbitMQ、Rocketmq等消息中间件、性能优化等内容的深入文章。我也将分享一些编程技巧和解决问题的方法,以帮助你更好地掌握Java编程。

🌐 我鼓励互动和建立社区,因此请留下你的问题、建议或主题请求,让我知道你感兴趣的内容。此外,我将分享最新的互联网和技术资讯,以确保你与技术世界的最新发展保持联系。我期待与你一起在技术之路上前进,一起探讨技术世界的无限可能性。

📖 保持关注我的博客,让我们共同追求技术卓越。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
1 条评论
热度
最新
欢迎大家一起交流学习
欢迎大家一起交流学习
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
在网站中集成Gitee第三方登录的完整指南
随着互联网的发展,第三方登录已经成为现代网站不可或缺的功能。它不仅简化了用户的注册和登录流程,还提高了用户体验。作为国内领先的代码托管平台,Gitee提供了OAuth2.0认证服务,允许开发者在自己的网站中集成Gitee账号登录功能。本文将详细介绍如何在网站中实现Gitee第三方登录,以及如何将Gitee账号与网站主账号进行绑定。
Front_Yue
2025/08/30
2040
在网站中集成Gitee第三方登录的完整指南
SpringBoot2 整合OAuth2组件,模拟第三方授权访问
验证第三方服务的身份,验证邮箱用户的身份,记录和管理认证Token,为资源服务器提供Token校验。场景:第三方网站借助用户的邮箱登录,并访问邮箱账户的基础信息,头像、名称等。
知了一笑
2020/12/28
9490
SpringBoot2 整合OAuth2组件,模拟第三方授权访问
SpringCloud-基于Oauth2的SSO单点登录原理解析与实现
单点登录(SSO)是一种身份验证过程,允许用户通过一次登录访问多个系统。本文将深入解析单点登录的原理,并详细介绍如何在Spring Cloud环境中实现单点登录。通过具体的架构图和代码示例,我们将展示SSO的工作机制和优势,帮助开发者更好地理解和应用这一技术。
Damon小智
2024/05/28
2.9K2
SpringCloud-基于Oauth2的SSO单点登录原理解析与实现
OCR识别
最近作者项目中用到了身份证识别跟营业执照的OCR识别,就研究了一下百度云跟腾讯云的OCR产品接口。
写代码的猿
2019/04/11
25K0
OCR识别
从零玩转第三方登录之QQ登录
在真正开始对接之前,我们先来聊一聊后台的方案设计。既然是对接第三方登录,那就免不了如何将用户信息保存。首先需要明确一点的是,用户在第三方登录成功之后,
杨不易呀
2022/01/18
2.4K0
从零玩转第三方登录之QQ登录
开源项目蘑菇博客是如何集成第三方登录
之前有小伙伴对蘑菇博客集成的第三方登录比较感兴趣,因此本篇主要讲解的是蘑菇博客项目是如何集成第三方登录。陌溪在做第三方登录的时候,也没有上来就造轮子,而是先在 Gitee 中找到了一个第三方登录的开源库:JustAuth。
陌溪
2021/03/22
7480
开源项目蘑菇博客是如何集成第三方登录
Spring Boot 接入 GitHub 第三方登录
链接:zyc.red/Spring/Security/OAuth2/OAuth2-Client/
JAVA葵花宝典
2020/11/13
2.7K0
Spring Boot 接入 GitHub 第三方登录
Spring Security源码分析三:Spring Social实现QQ社交登录
在标准的OAuth2协议中,1-6步都是固定,只有最后一步,不通的服务提供商返回的用户信息是不同的。Spring Social已经为我们封装好了1-6步。
java干货
2021/02/19
9880
Spring Security源码分析三:Spring Social实现QQ社交登录
没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)
上一篇《OAuth2.0 的四种授权方式》文末说过,后续要来一波OAuth2.0实战,耽误了几天今儿终于补上了。
程序员小富
2020/07/14
1.3K0
没错,用三方 Github 做授权登录就是这么简单!(OAuth2.0实战)
Spring Security 6.x 微信公众平台OAuth2授权实战
上一篇介绍了OAuth2协议的基本原理,以及Spring Security框架中自带的OAuth2客户端GitHub的实现细节,本篇以微信公众号网页授权登录为目的,介绍如何在原框架基础上定制开发OAuth2客户端。
fullstackyang
2024/06/23
8040
Spring Security 6.x 微信公众平台OAuth2授权实战
Flask 博客接入第三方登录
Flask不像Django一样有各种现成的组件可以选用,Flask的各种扩展也不那么「开箱即用」。在我的博客项目中,我选用的是Authlib,它是国内的一名Python资深开发者@lepture开发的一款全面完善的OAuth认证库。大家可能在别的教程里会看到用的是flask-oauthlib,它们的作者其实是同一人,而且在2019年的今天,我绝对会推荐你用Authlib而不是flask-oauthlib。
岂不美哉Frost
2019/12/02
2.2K0
Flask 博客接入第三方登录
Spring Security实战干货:集成微信公众号OAuth2.0授权
请注意,一定是微信公众号服务号,只有服务号才提供这样的能力。像胖哥的这样公众号虽然也是认证过的公众号,但是只能发发文章并不具备提供服务的能力。但是微信公众平台提供了沙盒功能来模拟服务号,可以降低开发难度,你可以到微信公众号测试账号页面申请,申请成功后别忘了关注测试公众号。
码农小胖哥
2021/09/09
1.8K0
Vue.js中Line第三方登录api实现[亲测可用]
demo 请狠狠的戳这里 http://download.lllomh.com/cliect/#/product/J417081951162505
芈渡
2020/06/17
2.7K0
Vue.js中Line第三方登录api实现[亲测可用]
分分钟让自己的网站接入 GitHub 第三方登录功能
然后选择 OAuth Apps,点击 Register a new application 按钮:
江南一点雨
2020/04/26
1.2K0
分分钟让自己的网站接入 GitHub 第三方登录功能
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
OAuth2(Open Authorization 2.0)是一种用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。它允许用户授权给第三方应用程序访问受保护的资源,同时确保用户的凭证信息不被直接暴露给第三方应用程序。
苏泽
2024/03/01
3.6K0
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
第三方微信授权登录APP接入_使用第三方应用打开是什么意思
在微信开放平台 https://open.weixin.qq.com/ 注册成为开发者,具体步骤略
全栈程序员站长
2022/09/20
1.7K0
第三方微信授权登录APP接入_使用第三方应用打开是什么意思
iOS微信第三方登录实现
移动应用微信登录是基于 OAuth2.0协议标准 构建的微信OAuth2.0授权登录系统。
用户7108768
2021/10/29
3.4K0
Springsecurity-oauth2之RemoteTokenServices
    RemoteTokenServices是用于向远程认证服务器验证token,同时获取token对应的用户的信息。
克虏伯
2019/04/15
4.8K0
Springsecurity-oauth2之RemoteTokenServices
Java 实现第三方 QQ 账号登录
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 来源 | uidaima.com/blog/4725615031700480.htm QQ互联注册一个账号 网站地址:https://connect.qq.com/,添加一个应用,具体怎么申请以及需要填写的信息,腾讯官网有详细文档。注册并完成相应信息填写后,可以在应用管理中查到应用的APP ID和APP Key。(注,这个申请还是比较麻烦的,申请了好几次,可能是脸黑吧)成功后如下图: 还需要添加一个回调地址,如下图:
程序猿DD
2023/04/17
1K0
Java 实现第三方 QQ 账号登录
Spring Security源码分析四:Spring Social实现微信社交登录
在上一章Spring-Security源码分析三-Spring-Social社交登录过程中,我们已经实现了使用Spring Social+Security的QQ社交登录。本章我们将实现微信的社交登录。(微信和QQ登录的大体流程相同,但存在一些细节上的差异,下面我们来简单实现一下)
java干货
2021/02/19
1.5K0
Spring Security源码分析四:Spring Social实现微信社交登录
推荐阅读
相关推荐
在网站中集成Gitee第三方登录的完整指南
更多 >
领券
一站式MCP教程库,解锁AI应用新玩法
涵盖代码开发、场景应用、自动测试全流程,助你从零构建专属AI助手
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档