一图读懂 google-oauth-java-client 支持的 5 种 OAuth 2.0 授权类型与选型建议【免费下载链接】google-oauth-java-clientGoogle OAuth Client Library for Java项目地址: https://gitcode.com/gh_mirrors/go/google-oauth-java-clientGoogle OAuth Client Library for Javagoogle-oauth-java-client是 Google 官方出品的 Java OAuth 客户端库专为 OAuth 2.0 与 OAuth 1.0a 授权标准设计可对接任意支持 OAuth 的授权服务器而不仅限于 Google 服务。本文用一张流程图和选型对照表帮你快速搞懂它支持的 5 种 OAuth 2.0 授权类型以及不同业务场景下该怎么选。什么是 google-oauth-java-client先看整体模块google-oauth-java-client 的核心代码位于 google-oauth-client 模块所有 OAuth 2.0 授权类型相关的类都集中在com.google.api.client.auth.oauth2包内。围绕核心包项目还提供了多个开箱即用的扩展模块google-oauth-client-servletServlet 环境下的授权码流程助手google-oauth-client-appengineGoogle App Engine 专用适配google-oauth-client-jetty本地起一个回调服务方便命令行程序授权google-oauth-client-java6桌面端凭证存储与授权码安装应用一张流程图看懂 5 种 OAuth 2.0 授权类型所有授权类型的入口都离不开基类 TokenRequest.java它的grant_type字段决定了走哪种授权类型。下面这张示意图概括了 5 种类型的完整链路┌──────────────────────────────────────────────┐ │ google-oauth-java-client 授权流程 │ └──────────────────────────────────────────────┘ │ ┌──────────────────┬─────────────────┼──────────────────┬──────────────────┐ ▼ ▼ ▼ ▼ ▼ 授权码模式 隐式授权 密码模式 客户端凭证 刷新令牌 AuthorizationCode BrowserClient PasswordToken ClientCredentials RefreshToken TokenRequest RequestUrl Request TokenRequest Request │ │ │ │ │ 跳转浏览器授权页 浏览器直接返回 用户名密码 仅凭 client_id 用 refresh_token 换取 code access token 换取 token 换取 token 换取新 token │ │ │ │ │ 适合 Web/App 适合纯前端 适合受信任客户端 适合服务端到服务端 延长访问时长1. 授权码模式Authorization Code⭐ 最推荐流程应用先把用户浏览器导向授权页 → 用户同意后拿到授权码code→ 再用code换 access token。对应实现类 AuthorizationCodeTokenRequest.java而高层封装 AuthorizationCodeFlow.java 帮你把加载凭证 → 跳转授权 → 换取令牌 → 持久化全流程管理起来。它也是唯一内置 PKCE 增强的授权类型通过AuthorizationCodeFlow.Builder.enablePKCE()一行开启参见示例 PKCESample.java。2. 隐式授权Implicit纯前端场景的轻量选择流程浏览器直接跳转授权页授权服务器在回调 URL 的 fragment 中直接返回 access token省掉了换取 code 这一步。对应类 BrowserClientRequestUrl.java。由于令牌直接暴露在 URL 中安全性较弱仅建议用于无法安全保存密钥的纯前端应用。3. 密码模式Password受信任客户端的直连方案流程直接把用户名和密码交给客户端由客户端换取 token。对应类 PasswordTokenRequest.java。它要求应用完全受信任通常是自家 App 配自家服务否则密码泄露风险很高。4. 客户端凭证模式Client Credentials服务端到服务端的利器流程不需要用户参与应用用 client_id client_secret 直接换取 token最适合定时任务、后台服务调用 API。对应类 ClientCredentialsTokenRequest.java。5. 刷新令牌Refresh Token让访问永不断档access token 通常一小时左右过期此时可用 refresh token 换新的。对应类 RefreshTokenRequest.java。更省心的是 Credential.java 会在令牌过期时自动触发刷新配合 DataStoreCredentialRefreshListener.java 还能把新令牌自动持久化。OAuth 2.0 授权类型选型建议一张对照表帮你决策授权类型是否需要用户参与令牌安全性典型场景对应的核心类授权码模式✅ 需要高支持 PKCEWeb 应用、移动 App、桌面程序AuthorizationCodeTokenRequest隐式授权✅ 需要低令牌在 URL 中纯 JavaScript 单页应用BrowserClientRequestUrl密码模式✅ 需要中依赖客户端可信自家 App 直连自家服务PasswordTokenRequest客户端凭证❌ 无需高服务端到服务端、定时任务ClientCredentialsTokenRequest刷新令牌❌ 无需高需安全存储延长已授权令牌的有效期RefreshTokenRequest选型速记有用户交互就优先授权码模式PKCE纯前端没后端选隐式授权后端调用选客户端凭证令牌过期用刷新令牌只有完全可信的私有系统才考虑密码模式。如何快速上手从文档到示例一条龙官方文档 docs/oauth-2.0.md 详细讲解了授权码流程、Servlet 流程、App Engine 流程和浏览器端流程的完整写法。想直接跑代码的话参考以下示例DailyMotion 命令行授权码示例DailyMotionSample.javaKeycloak PKCE 授权码示例PKCESample.javaServlet 环境可直接继承 AbstractAuthorizationCodeServlet.java小结google-oauth-java-client 用 5 个核心类覆盖了 OAuth 2.0 标准的全部主流授权类型并且通过Credential的自动刷新、PKCE 内置支持、多环境扩展模块把从授权到调用 API的繁琐细节都封装好了。选型时记住一句话默认选授权码模式服务端通信选客户端凭证需要续期就加刷新令牌你的 OAuth 2.0 集成之路就能少踩很多坑。【免费下载链接】google-oauth-java-clientGoogle OAuth Client Library for Java项目地址: https://gitcode.com/gh_mirrors/go/google-oauth-java-client创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考