Google Gmail Oauth Client ID 认证指南

官方文档:https://developers.google.com/workspace/guides/configure-oauth-consent

https://developers.google.com/workspace/guides/create-credentials

参考视频:https://www.youtube.com/watch?v=tGDn3V-mIOM

https://www.youtube.com/watch?v=IZ1ZEjuJF8U

OAuth2 client ID and client secret

新建 project

project 控制台:https://console.cloud.google.com/cloud-resource-manager

 

 

Enable Gmail Api

 

 

 

点击 Gmail Api 并 Enable

 

新建 app

控制台:https://console.cloud.google.com/apis/credentials/consent

打开控制台,选择 project:

 

 

点击菜单 OAuth consent screen,新建 app

 

 

:User type 只能选择 External,Internal 是给 Google Worksapce 用户使用的,是个收费的产品

step1:

 

 

 

step2:Scopes

这一步暂时不选择,直接 ’保存并继续‘

step3: add test users

 

 

step4:创建完成

 

 

step5: 发布 app,使 app 状态处于 In production 状态,防止 refresh token 失效

 

 

 

 

新建 OAuth 2.0 Client

控制台地址:https://console.developers.google.com/apis/credentials

点击 Credentials 菜单

 

 

 

保存并下载 .json 文件,可以命名为 credentials.json

 

获取 scope 对应的 code

浏览器中请求如下 url

  • scope 是需要的权限 https://developers.google.com/gmail/api/auth/scopes

  • [your_client_id] 是上一步 credentials.json 中的 client_id 参数

https://accounts.google.com/o/oauth2/v2/auth?scope=https://mail.google.com/&access_type=offline&redirect_uri=http://localhost&response_type=code&client_id=[your_client_id]

请求之后,浏览器地址栏会出现如下链接

 http://localhost/?code=4/0AX4XfWhkQGEQpDSfSwE2vOUDFpoNBLha_KBVYfngcBxnL0qLXQpEQ&scope=https://mail.google.com/

code 参数即我们需要的值

获取 access_token 和 refresh_token

Wsl 执行如下 url,code 来自上一步获取的 code,client_id,client_secret 均来自 credentials.json

 curl \
--request POST \
--data "code=4/0AX4XfWhkQGEQpDSfSwE2vOUDFpoNBVYfngcBxnL0VU1PlqLXQpEQ&client_id=358916748846-epks869ps.googleusercontent.com&client_secret=GOCSPX-ItJ5x6Bou5bTj&redirect_uri=http://localhost&grant_type=authorization_code" \
https://accounts.google.com/o/oauth2/token

返回:

{"access_token": "ya29.a0ARrdaM_9OV_3KTHol3hDWZnFtuxkFOCxPKBul8YZbSkjjM1L4rfx-iw35R9o4F_K27xFwwt_BJ2lzcZj5nkPyTTj-xNJ038gr9qS_z1ESQ67SJ","expires_in": 3599,"refresh_token": "1//0efEzWtmVh6BvCgYIARAAGA4SNwF-L9IrHZNakmKqCBBpMg--p5S4d9PgG2OzQY_26P6sHYrVc","scope": "https://mail.google.com/","token_type": "Bearer"
}

认证参考代码1 (java)

private Gmail gmailService = null;
private GoogleClientSecrets clientSecrets = null;
private static final String CREDENTIALS_FILE_LOCATION = "configuration/gmail/credentials.json";@PostConstruct
public void init() throws IOException, GeneralSecurityException {log.info("init gmailService start ...");clientSecrets = GoogleClientSecrets.load(JsonUtils.JSON_FACTORY,new InputStreamReader(GmailUtils.class.getClassLoader().getResourceAsStream(CREDENTIALS_FILE_LOCATION)));Credential authorize = new GoogleCredential.Builder().setTransport(GoogleNetHttpTransport.newTrustedTransport()).setJsonFactory(JsonUtils.JSON_FACTORY).setClientSecrets(clientSecrets.getDetails().getClientId(),clientSecrets.getDetails().getClientSecret()).build().setAccessToken(getAccessToken(gmailConfig.getGmailSettings().getRefreshToken(), gmailConfig.getGmailSettings().getTokenUrl())).setRefreshToken(gmailConfig.getGmailSettings().getRefreshToken());final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();gmailService = new Gmail.Builder(HTTP_TRANSPORT, JsonUtils.JSON_FACTORY, authorize).setApplicationName(gmailConfig.getGmailSettings().getApplicationName()).build();log.info("init gmailService completed ...");
}private String getAccessToken(String refreshToken, String tokenUrl) {Map<String, Object> params = new LinkedHashMap<>();params.put("grant_type", "refresh_token");params.put("client_id", clientSecrets.getDetails().getClientId());params.put("client_secret", clientSecrets.getDetails().getClientSecret());params.put("refresh_token", refreshToken);RequestBody authRequestBody = RequestBody.create(MediaType.parse("application/json;charset=UTF-8"), JsonUtils.toString(params));Request request = new Request.Builder().url(tokenUrl).method("POST", authRequestBody).build();String response = netUtils.executeRequest(request);JSONObject json = new JSONObject(response);return json.getString("access_token");
}

 认证参考代码2 (java)

public static Adsense createAdsense(AdsenseAccount account) throws IOException {HttpTransport HTTP_TRANSPORT = new NetHttpTransport();GoogleRefreshTokenRequest request = new GoogleRefreshTokenRequest(HTTP_TRANSPORT, JsonUtils.JSON_FACTORY,account.getRefreshToken(), account.getClientId(), account.getClientSecret()).setScopes(Collections.singleton(AdsenseScopes.ADSENSE_READONLY));Credential credential = new Credential.Builder(BearerToken.authorizationHeaderAccessMethod()).setTransport(HTTP_TRANSPORT).setJsonFactory(JsonUtils.JSON_FACTORY).setTokenServerUrl(new GenericUrl(GoogleOAuthConstants.TOKEN_SERVER_URL)).build().setFromTokenResponse(request.execute());return new Adsense.Builder(HTTP_TRANSPORT, JsonUtils.JSON_FACTORY, setHttpTimeout(credential)).setApplicationName("ad-data-scraper").build();}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/28751.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第三方登陆--接入谷歌和FaceBook

一、第三方登陆流程 一、用户点击登录&#xff0c;前端会调用第三方的SDK&#xff0c;获取到对应的数据&#xff0c;一般会有token、userId。 二、前端拿到这些信息之后&#xff0c;回调自己后端服务端的接口&#xff0c;进行token校验。主要目的是后端得防止他人使用恶意手段&…

chatgpt赋能python:Python如何删除空白

Python 如何删除空白 在SEO优化过程中&#xff0c;我们需要保证我们的网页内容的质量和可读性。其中&#xff0c;一个重要的因素是删除空白。在Python中&#xff0c;我们可以使用多种方法来删除空白&#xff0c;下面我们将介绍一些方法并讨论它们的优缺点。 方法一&#xff1…

chatgpt赋能python:如何使用Python创建空白图?

如何使用Python创建空白图&#xff1f; 对于数据分析师、图像处理专家或任何对Python编程语言感兴趣的人来说&#xff0c;创建空白图可能是一个常见的任务。这是非常合理的&#xff0c;因为Python是一种非常通用的编程语言&#xff0c;提供了很多模块和库&#xff0c;可用于处…

数字水印(DWT算法Python实现)

全部代码&#xff1a; """------------------------- Project: DWT数字水印嵌入、提取 Author: Tysay Environment: Python3.8 VsCode History: 2022/12/01 -------------------------""" import cv2 import pywt import numpy a…

水印,数字水印,频域水印(隐形水印)很麻烦!用这个分分钟搞定!

水印&#xff0c;你在很多公司图片都会看到&#xff0c;里面都会加入图片都会有显式水印&#xff0c;或者半隐形水印。平常加水印&#xff0c;只要将两张图片色值混合就没问题了 import cv2 import numpy as np import matplotlib import matplotlib.pyplot as plt img cv2.…

什么是数字水印

经常有文章把数字签名和数字水印“傻傻分不清”&#xff0c;那今天就介绍一下数字水印。 一、数字水印技术原理 数字水印是一种信息隐藏技术&#xff0c;它利用人体感官的限制&#xff0c;将数字信号&#xff0c;如图像、文字、符号、数字等一切可以作为标记、标识的信息与原…

数字图像水印处理

数字图像水印处理 一个处理数字图像水印的系统&#xff0c;该系统可以实现添加可见水印&#xff0c;添加不可见水印&#xff0c;识别水印&#xff0c;提取可见水印&#xff0c;提取不可见水印&#xff0c;打开、保存图片等功能。(这里的水印识别指的是识别自己添加的水印) 添…

文心大模型3.5勇夺三个冠军领跑,中文完爆GPT-4!国际权威报告7项满分「全班第一」...

新智元报道 编辑&#xff1a;编辑部 【新智元导读】这场百模大战&#xff0c;究竟是谁胜出&#xff1f;国际权威IDC发布大模型技术报告中&#xff0c;文心大模型3.5拿下7个满分&#xff0c;三个绝对第一。 一觉醒来&#xff0c;好不热闹&#xff0c;Meta深夜投出重磅炸弹&…

文心一言APP来了

金磊 丰色 发自 凹非寺量子位 | 公众号 QbitAI 终于&#xff0c;正版百度文心一言APP上架苹果商店了&#xff01; &#xff08;此前百度因为盗版文心一言APP泛滥&#xff0c;还起诉过苹果公司及相关开发团队。&#xff09; 这般“新鲜出炉”的工具&#xff0c;我们当然要率先体…

文心一言APP国区可下载!免费体验120+玩法,PPT大纲Excel公式一键生成

点击关注公众号&#xff1a;互联网架构师&#xff0c;后台回复 2T获取2TB学习资源&#xff01; 上一篇&#xff1a;Alibaba开源内网高并发编程手册.pdf 终于&#xff0c;正版百度文心一言APP上架苹果商店了&#xff01; &#xff08;此前百度因为盗版文心一言APP泛滥&#xff0…

文心一言APP国区可下载,免费体验120+玩法,PPT大纲Excel公式一键生成

来源&#xff1a;量子位 | 公众号 QbitAI 终于&#xff0c;正版百度文心一言APP上架苹果商店了&#xff01; &#xff08;此前百度因为盗版文心一言APP泛滥&#xff0c;还起诉过苹果公司及相关开发团队。&#xff09; 这般“新鲜出炉”的工具&#xff0c;我们当然要率先体验一把…

chatgpt赋能python:Python给电影打分-如何使用Python评估您最喜爱的电影

Python给电影打分 - 如何使用Python评估您最喜爱的电影 Python是一种流行的编程语言&#xff0c;广泛用于数据科学和机器学习。但是&#xff0c;您是否知道您可以使用Python为您最喜爱的电影打分并评估其受欢迎程度&#xff1f;在这篇文章中&#xff0c;我们将介绍如何使用Pyt…

文心千帆大模型平台,一站式企业级大模型平台

文心千帆大模型平台&#xff0c;一站式企业级大模型平台 0. 前言1. 人工智能发展历程1.1 传统机器学习1.2 深度学习1.3 大模型时代 2. 文心千帆2.1 文心千帆介绍2.2 文心千帆应用场景2.3 文心千帆平台优势 3. 文心千帆初体验3.1 注册流程3.2 创建应用3.3 在线测试3.4 数据服务3…

【自我升级链】所谓的傅盛认知升级

所有学习上的成功&#xff0c;都只依靠两件事 – 策略和坚持&#xff0c;而坚持本身就是最重要的策略&#xff01; 前段时间读的书&#xff0c;看的一些文章里面&#xff0c;全都在提"认知"这个词。 但是&#xff0c;“认知”这个词&#xff0c;我是在2016年的时候就…

傅盛:AI是企业弯道超车的机会,大家在同一起跑线上

2019-10-20 11:58:08 第六届世界互联网大会于10月20日-22日在浙江乌镇召开。 猎豹移动CEO傅盛表示&#xff0c;从收入的相对值增长来看&#xff0c;猎豹的AI业务的增长还是挺快&#xff0c;“但是要短期内达到猎豹50亿级的盘子是不太可能的”。 傅盛认为&#xff0c;AI是企业弯…

从猎豹CEO傅盛和韩寒的没落,谈谈为什么曾经优秀的人突然变得平庸?

点赞再看&#xff0c;养成习惯&#xff0c;微信搜一搜【findyi】关注这个喜欢写情怀的程序员。 回复【1】获得程序员职场晋升PPT一份 一个读者的提问&#xff1a;洋哥&#xff0c;我从小都是学霸&#xff0c;本硕都是985&#xff0c;计算机科班出身&#xff0c;但进入职场后却始…

金山网络CEO傅盛: 产品设计, 简单才是王道

本文来自 http://www.36kr.com/p/151814.html 2012 年 9 月 8 日—9 日&#xff0c;中国软件开发者大会在北京国家会议中心举行&#xff0c;金山网络 CEO 傅盛在会上发表题为“简单唯美”的演讲&#xff0c;他表示&#xff0c;项目要想成功&#xff0c;产品设计一定要足够简单&…

傅盛认知三部曲之一:所谓成长就是认知升级

我一直在思索&#xff0c;怎么才能让一家公司更快地成长&#xff1f;一个人怎么才能从一群人的竞争当中脱颖而出&#xff1f; 1、人的四种认知状态 最近我看了一幅图&#xff0c;我在其上加了一个数字注脚。 这是一个人认知的四种状态——“不知道自己不知道”&#xff0c;“知…

【深度好文】强烈推荐:傅盛认知三部曲!

转载傅盛认知三部曲的原因 最近看到 傅盛 大佬关于认知的几篇文章&#xff0c;感觉实在牛逼&#xff0c;在此转载一下。 大家优先点击下面的几个链接查看原文吧&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 傅盛认知三部曲之一&#xff1a;所谓…

张鹏对话傅盛:产业互联网时代需要什么样的机器人?

12月21日&#xff0c;备受瞩目的极客公园创新大会十周年活动继续在北京举行。作为中国大型的创新者社区&#xff0c;全球科技、科学、文化艺术、创造力等领域里的科技主义者们在此汇聚一堂&#xff0c;共同为中国极客奉献思维升级的盛宴。猎豹移动董事长兼CEO傅盛受邀出席大会并…