28-Google登录接入指南
Google登录接入指南:费用详解与实现步骤
概述
Google登录是一种基于OAuth 2.0和OpenID Connect协议的身份验证解决方案,允许用户使用其Google账号安全地登录第三方应用。本文将详细介绍如何接入Google登录功能,以及相关的费用问题。
费用解析
Google OAuth 2.0费用情况
核心答案:Google登录本身是免费的
根据官方信息,Google OAuth 2.0服务对开发者完全免费,没有请求次数限制。不过需要注意以下几点:
-
免费范围:
- Google OAuth 2.0授权流程免费
- 用户身份验证免费
- 获取基本用户信息(姓名、邮箱、头像等)免费
-
限制条件:
- 未通过生产环境验证的应用有100个用户的限制
- 需要通过Google的审核才能移除用户数量限制
-
潜在费用:
- 用户数据存储可能产生费用(如使用云数据库)
- 调用其他Google API(如翻译API)可能收费
- 使用Google Cloud Identity Platform等高级服务需要付费
重要提示:有开发者报告因OAuth 2.0配置不当导致意外调用收费API的情况,请确保只请求必要的权限范围。
接入步骤详解
第一步:创建Google Cloud项目
- 访问Google Cloud Console
- 创建新项目或选择现有项目
- 启用OAuth同意屏幕配置
第二步:配置OAuth同意屏幕
- 在Google Cloud Console中搜索"Google Auth Platform"
- 配置OAuth同意屏幕:
- 选择"外部"用户类型
- 填写应用名称、用户支持电子邮件等基本信息
- 添加应用logo和联系人信息
- 设置应用域名和授权域名
第三步:创建OAuth 2.0凭据
- 导航到"凭据"页面
- 点击"创建凭据" > "OAuth客户端ID"
- 选择应用类型(Web应用、Android、iOS等)
- 配置授权重定向URI(重要:必须与代码中的回调地址匹配)
- 保存并记录客户端ID和客户端密钥
第四步:实现OAuth 2.0流程
以下是使用Node.js的实现示例:
const {OAuth2Client} = require('google-auth-library');
const http = require('http');
const url = require('url');
const open = require('open');
const destroyer = require('server-destroy');
// 从Google Cloud Console下载的OAuth2配置
const keys = require('./oauth2.keys.json');
async function main() {
const oAuth2Client = await getAuthenticatedClient();
// 使用已认证的客户端调用People API
const apiUrl = 'https://people.googleapis.com/v1/people/me?personFields=names';
const res = await oAuth2Client.fetch(apiUrl);
console.log(res.data);
// 获取令牌信息
const tokenInfo = await oAuth2Client.getTokenInfo(
oAuth2Client.credentials.access_token
);
console.log(tokenInfo);
}
function getAuthenticatedClient() {
return new Promise((resolve, reject) => {
// 创建OAuth2客户端
const oAuth2Client = new OAuth2Client({
clientId: keys.web.client_id,
clientSecret: keys.web.client_secret,
redirectUri: keys.web.redirect_uris[0]
});
// 生成授权URL
const authorizeUrl = oAuth2Client.generateAuthUrl({
access_type: 'offline',
scope: 'https://www.googleapis.com/auth/userinfo.profile',
});
// 创建本地服务器处理回调
const server = http
.createServer(async (req, res) => {
try {
if (req.url.indexOf('/oauth2callback') > -1) {
const qs = new url.URL(req.url, 'http://localhost:3000')
.searchParams;
const code = qs.get('code');
console.log(`授权码: ${code}`);
res.end('认证成功!请返回控制台查看结果。');
server.destroy();
// 使用授权码获取令牌
const r = await oAuth2Client.getToken(code);
oAuth2Client.setCredentials(r.tokens);
console.info('令牌获取成功。');
resolve(oAuth2Client);
}
} catch (e) {
reject(e);
}
})
.listen(3000, () => {
// 打开浏览器进行授权
open(authorizeUrl, {wait: false}).then(cp => cp.unref());
});
destroyer(server);
});
}
main().catch(console.error);
第五步:处理生产环境
-
测试阶段:
- 在OAuth用户授权页面添加测试用户邮箱
- 只有添加的测试用户可以使用应用登录
-
发布应用:
- 完成所有必要配置
- 提交应用审核
- 通过审核后点击"发布应用"移除用户限制
最佳实践
安全考虑
-
安全存储客户端密钥:
- 不要在前端代码中暴露客户端密钥
- 使用环境变量或安全存储服务
-
验证令牌:
const {OAuth2Client} = require('google-auth-library'); const client = new OAuth2Client(); async function verifyToken(token) { const ticket = await client.verifyIdToken({ idToken: token, audience: YOUR_CLIENT_ID, // 指定客户端ID }); const payload = ticket.getPayload(); const userid = payload['sub']; // 如果userid存在于您的数据库中,则令牌有效 return payload; } -
限制权限范围:
- 只请求应用所需的最小权限
- 避免请求敏感权限范围
用户体验优化
-
自动登录:
- 使用刷新令牌实现自动登录
- 合理设置令牌过期时间
-
错误处理:
- 提供清晰的错误信息
- 实现重试机制
-
多平台支持:
- Google提供适用于Web、Android、iOS的SDK
- 根据平台选择合适的实现方式
常见问题解答
Q: Google登录真的完全免费吗?
A: Google OAuth 2.0服务本身免费,但需要注意:
- 测试应用有100用户限制
- 存储用户数据可能产生费用
- 其他Google API调用可能收费
Q: 如何移除100用户限制?
A: 需要通过Google的应用审核流程:
- 完善OAuth同意屏幕信息
- 确保应用符合Google政策
- 提交审核并等待批准
- 批准后发布应用
Q: 是否需要用户每次都重新授权?
A: 不需要。通过设置access_type: 'offline'可以获取刷新令牌,实现长期访问而无需用户重复授权。
Q: 如何处理令牌过期?
A: 实现自动令牌刷新机制:
// 检查令牌是否即将过期
if (isTokenExpiringSoon(oAuth2Client.credentials)) {
const {credentials} = await oAuth2Client.refreshAccessToken();
oAuth2Client.setCredentials(credentials);
}
总结
Google登录是一个免费且功能强大的身份验证解决方案,适合各种规模的应用。通过遵循本文的步骤和最佳实践,您可以安全、高效地集成Google登录功能,提升用户体验的同时降低开发成本。
记住,虽然Google登录本身免费,但合理规划架构和资源使用仍然很重要,以避免意外的费用产生。

浙公网安备 33010602011771号