首页 > 其他分享 >谷歌登录 (服务端)

谷歌登录 (服务端)

时间:2024-09-14 16:16:39浏览次数:8  
标签:google 登录 谷歌 auth token client com email 服务端

不需要开发者账号

参考链接

https://blog.csdn.net/qq_43958998/article/details/139113126

https://juejin.cn/post/7252584767593627707

参数获取

获取 client_id 、client_secret 、redirect_uri

配置链接

https://console.cloud.google.com/apis/dashboard

需要启用

创建凭据

配置凭据参数

依赖

<!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client -->
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>2.6.0</version>
</dependency>
<!-- google client依赖 https://mvnrepository.com/artifact/com.google.auth/google-auth-library-oauth2-http -->
<dependency>
  <groupId>com.google.auth</groupId>
  <artifactId>google-auth-library-oauth2-http</artifactId>
  <version>1.19.0</version>
</dependency>

登录方式

使用 access_token登录

获取 access_token

https://accounts.google.com/o/oauth2/v2/auth?
client_id= ****自己的***
&redirect_uri= ****配置好的***
&scope=email openid https://www.googleapis.com/auth/userinfo.email
&response_type=token

http://localhost:3000/auth/callback#access_token=ya29.a0AcM612z4iOgHa1SW9Wj_qunUBmh33NMlOq25N6DVSGPCAL4SlsdhQyToG1la3NKbfEog6xviPl4YJ6i_26CZuyER7pIwbly353WNPtePivp9ZWyYTfQ7SmPRSzgc6Rk962Bc52DDsDuH2tSNoIFlQBhS3xLpXDIMH0YaCgYKAecSARASFQHGX2Mih7vVj6mQcYrGKWarchReEw0170&token_type=Bearer&expires_in=3599&scope=email openid https://www.googleapis.com/auth/userinfo.email&authuser=0&prompt=none

ya29.a0AcM612z4iOgHa1SW9Wj_qunUBmh33NMlOq25N6DVSGPCAL4SlsdhQyToG1la3NKbfEog6xviPl4YJ6i_26CZuyER7pIwbly353WNPtePivp9ZWyYTfQ7SmPRSzgc6Rk962Bc52DDsDuH2tSNoIFlQBhS3xLpXDIMH0YaCgYKAecSARASFQHGX2Mih7vVj6mQcYrGKWarchReEw0170

获取用户信息

GET https://www.googleapis.com/oauth2/v2/userinfo
Content-Type: application/x-www-form-urlencoded

Headers:
Authorization Bearer ya29.a0AcM612z4iOgHa1SW9Wj_qunUBmh33NMlOq25N6DVSGPCAL4SlsdhQyToG1la3NKbfEog6xviPl4YJ6i_26CZuyER7pIwbly353WNPtePivp9ZWyYTfQ7SmPRSzgc6Rk962Bc52DDsDuH2tSNoIFlQBhS3xLpXDIMH0YaCgYKAecSARASFQHGX2Mih7vVj6mQcYrGKWarchReEw0170

无参数

响应参数

{
    "id": "1000000222211",
    "email": "[email protected]",
    "verified_email": true,
    "picture": "https://lh3.googleusercontent.com/a-/ALV-UjV1MoUDDaZoLpj7y5GB4SJtqV_S01oU6sfCOu7aLsMBMGe5Nw=s96-c"
}

验证代码

无、直接调用userinfo接口验证用户信息即可

使用 id_token 登录

2.1 获取 code

https://accounts.google.com/o/oauth2/v2/auth?
client_id= ****自己的***
&redirect_uri= ****配置好的***
&scope=email openid https://www.googleapis.com/auth/userinfo.email
&response_type=code

在浏览器上执行,登录完成后跳转链接如下

http://localhost:3000/auth/callback?code=4%2F0AQlEd8zQ-sWfUeAVxpfqL-y9AMT5Arbze0c3ydZfDInbYZrFHxw38TPTeO1kiWPaT5W4Sg&scope=email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+openid&authuser=0&prompt=none

code url 解码

4/0AQlEd8zQ-sWfUeAVxpfqL-y9AMT5Arbze0c3ydZfDInbYZrFHxw38TPTeO1kiWPaT5W4Sg

2.2 获取 id_token

POST https://oauth2.googleapis.com/token
Content-Type: application/x-www-form-urlencoded
 
code= 参考2.1步结果
client_id=your-client-id
client_secret=your-client-secret
redirect_uri= ****配置好的***
grant_type= authorization_code //固定值

注意点: code只能使用一次

相应参数

{
  "access_token": "ya29.a0AcM612xU1YjjT5IOBi4GUTNaMAEXQdgx7e7XwwU-YPGFXEz-91AXrQ1PwenCNpsfQxvF7L9Tiza0yZ7mIPFSN5TYKh6k5JQnsLsgqt5B-TRKpwPa2wyhmzeehGXS11q8x4t4U-jbZLQUggiQ-GxsQzraysn2iHcYrVIaCgYKAVYSARASFQHGX2MiHF48i6Pv5fHTIKq_UhKliQ0170",
  "expires_in": 3558,
  "scope": "https://www.googleapis.com/auth/userinfo.email openid",
  "token_type": "Bearer",
  "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6ImQ3YjkzOTc3MWE3ODAwYzQxM2Y5MDA1MTAxMmQ5NzU5ODE5MTZkNzEiLCJ0eXAiOiJKV1QifQ.eyJpc3MiOiJodHRwczovL2FjY291bnRzLmdvb2dsZS5jb20iLCJhenAiOiI4ODU3NTQzMTg2NzAtMGl0ZGhoOGZqcDZuY2tra2ViYjJuaDA3OXMxbDhwYmguYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJhdWQiOiI4ODU3NTQzMTg2NzAtMGl0ZGhoOGZqcDZuY2tra2ViYjJuaDA3OXMxbDhwYmguYXBwcy5nb29nbGV1c2VyY29udGVudC5jb20iLCJzdWIiOiIxMDMwNDc0OTYzMTk1NDM0OTg0NTkiLCJlbWFpbCI6Imh1aHVzemwwNzIwQGdtYWlsLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJhdF9oYXNoIjoiWExiWFQxal9Bd2o5UmxCN1AwTml2USIsImlhdCI6MTcyNjI5NzYyNSwiZXhwIjoxNzI2MzAxMjI1fQ.MHO4VYJ0YxwAyl9Bz71V9KPOTwlsC8ivD6oOaSneIxPtQE7hXstYtkYIggwGddjoz7Z1kka-D9lDhCxXOpklkewMihogubWLQoOIiMTw-lHA-hLH3kRK5UMuJwEByawsVQrmqcH70emL0cF0_dJVNMeRCAMpMRhRgpfiPFk6O-G6piUalX7d92GGC0PZS5HVtV24P9b8ueWvgWezcqKp8M9ZxqYnJTRj7HnvsP18EjDU-tHmgKmq0zEmE55uIGPlEhYLk4kg2LOZ-lkXbdhhSrWvUU8wyXtDcNJAVDKOxEwIfj-m66FCAaK1_UYrSZagIT2FOmilUTGz8YEcz5ivUg"
}

2.3 验证代码

import com.ai.emotion.domain.facade.GoogleVerifyFacade;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdToken.Payload;
import com.google.api.client.googleapis.auth.oauth2.GoogleIdTokenVerifier;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.gson.GsonFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Repository;

import java.util.Collections;
import java.util.Objects;

/**
 * 依赖参考: https://developers.google.cn/api-client-library/java?hl=sr
 * api参考: https://developers.google.cn/identity/sign-in/web/backend-auth?hl=sr#java
 */
@Repository
@Slf4j
public class GoogleVerifyFacadeImpl implements GoogleVerifyFacade {


    private String CLIENT_ID = "885754318670-0itdhh8fjp6nckkkebb2nh079s1l8pbh.apps.googleusercontent.com";

    @Override
    public boolean loginVerify(String email, String token) {
        if (StringUtils.isAnyBlank(email, token)){
            return false;
        }
        try {
            HttpTransport transport  = GoogleNetHttpTransport.newTrustedTransport();
            GsonFactory defaultInstance = GsonFactory.getDefaultInstance();
            GoogleIdTokenVerifier verifier = new GoogleIdTokenVerifier.Builder(transport, defaultInstance)
            .setAudience(Collections.singletonList(CLIENT_ID))
            .build();
            GoogleIdToken idToken = verifier.verify(token);
            if (idToken != null) {
                Payload payload = idToken.getPayload();
                return Objects.equals(email, payload.getEmail());
            } else {
                return false;
            }
        } catch (Exception e) {
            log.error("GoogleVerifyFacadeImpl#loginVerify email {} token {} ", email, token, e);
            return false;
        }
    }
}

标签:google,登录,谷歌,auth,token,client,com,email,服务端
From: https://www.cnblogs.com/huhuszl/p/18414226

相关文章

  • 谷歌个人开发者账号申请流程
    需支付25美金用于创建Google开发者账号的,Google账号只能使用Visa、Master、JCB、运通卡或Discover(国内用户建议使用招商的信用卡,其他行的支付有时会不成功),只需支付一次,即可永久使用创建Play管理中心开发者账号所需的必要信息https://support.google.com/googleplay/android-devel......
  • vue3 登录页视频背景 开发
    方法比较笨,可以参考,思路如下:    我把这个页面看成三层。最里面是视频,中间挂个蒙板,然后最上层放内容,这样简单粗暴的达到效果 然后来说说中间这个蒙板吧,主要是两个想法,      一个就是客户,领导们的想法比较多,如果仅仅只是说有个视频虚化啥的,有可能并不能完全解......
  • PbootCMS网站后台登录页面样式怎么修改
    如果你需要修改PBootCMS后台的样式,通常你需要编辑的是与后台视图相关的HTML、CSS和JavaScript文件。根据提供的信息,后台样式相关的文件通常位于如下路径:路径位置:根目录/apps/admin/view/default/在这个目录下,你可以找到index.html文件,该文件包含了后台界面的基本结构。如果你......
  • 【北京语言大学主办 | 快速见刊 | 高校认可会议 | 人文社科年度重磅会议 | 往届已见刊
    重要信息大会网站:https://ais.cn/u/zYJRZj【投稿参会】截稿时间:以官网信息为准大会时间:2024年11月22-24日大会地点:中国-北京主办单位:北京语言大学提交检索:CPCI、CNKI(知网)、GoogleScholar(谷歌学术) ↑快速检索↑见刊出版:会议论文集出版(快见刊)*含online线上见刊链......
  • 剖析 SSO 和 OAuth:解锁单点登录与授权的技术密码
    一、概念介绍1.1SSO:单点登录SSO(SingleSign-On,单点登录)是一种身份验证方法,允许用户通过身份提供商(IdP)进行一次身份验证即可访问多个应用程序,它的核心目标是减少用户在不同系统之间重复输入用户名和密码的繁琐操作,提高用户体验和工作效率图片如图,SSO是抽出登录的模块,A......
  • 【Python爬虫系列】_016.关于登录和验证码
    我的个人主页:......
  • 免费试用谷歌云API指南
    在云计算时代,各个云服务商提供的服务越来越多,为了方便用户在不同的云服务商之间进行选择,很多云厂商都开发了相应的API供用户调用。使用谷歌云API,可以让用户轻松调用谷歌云上的各种服务。现在,我们将以GoogleCloudPlatform(GCP)为例,向大家介绍使用谷歌云API的具体方法。......
  • 多次登录失败用户被锁定及使用Pam_Tally2解锁
    问题现象-Accountlocked   前些天服务器的root用户被锁定,导致无法登录服务器,提示:Accountlockeddueto10failedlogins,下面是解锁的全过程解决办法和解决的过程--常规找回密码中增加重置次数。1、开机时按e键进入编辑模式2、按方向键--向下定位找到ro一行,ro的......
  • 谷歌SEO新纪元:深度解析蜘蛛池+泛目录站群推广秘籍
    谷歌SEO新纪元:深度解析蜘蛛池+泛目录站群推广秘籍什么是谷歌“蜘蛛”?对独立站运营有什么影响?#干货#科技#seo推荐阅读:百收软件蜘蛛池会员合集https://www.bsw80.com/post/1690.html这里是百收网SEO商学院,专注全套黑白帽SEO教学战群推广,我们今天主要是分享一个最新的一个......
  • ssh限制登录IP方法
    方法一:在/etc/hosts.allow中添加允许ssh登陆的ip或者网段sshd:192.168.1.2:allow或sshd:192.168.1.0/24:allow(允许的IP段)在/etc/hosts.deny添加不允许ssh登陆的IPsshd:ALL方法二:使用iptables进行限制:iptables-AINPUT-ptcp-s192.168.1.2--destination-port22-j......