OAuth 2.0最佳实践

目录

一 OAuth 2.0 是什么

二 为什么用 OAuth 2.0

三 OAuth 2.0 四种授权流程

3.1 授权码模式

3.2 密码模式

3.3 客户端模式

3.4 简化模式

四 授权码模式详解

4.1 授权页面

4.2 code 生成

4.3 token 签发

五 授权码模式安全建设

5.1 业务安全

5.2 传输安全


一 OAuth 2.0 是什么

OAuth 2.0 是一种授权协议。

二 为什么用 OAuth 2.0

OAuth 2.0 这种授权协议,能保证第三方软件只有在获得授权之后,才可以进一步访问授权者的数据,能保证授权者数据的安全性。

三 OAuth 2.0 四种授权流程

在 OAuth 2.0 的体系里面有 4 种角色,它们分别是资源拥有者、客户端、授权服务和受保护资源。

为了详细的讲解四种授权流程,以产品 A 集成产品 B 进行授权登录为例,来具体说明四种授权流程和应用场景。

3.1 授权码模式

OAuth 2.0最佳实践_第1张图片

1 用户访问产品 A,产品 A 上集成了产品 B 作为第三方授权登录,引导用户跳转到授权页面。

2 用户点击授权后,产品 A 就可以访问用户在产品 B 的资源了。

应用场景:授权码模式是 OAuth 2.0 体系中迄今流程最完备、安全性最高的授权流程。目前主流的授权模式都是使用该流程。

3.2 密码模式

OAuth 2.0最佳实践_第2张图片

1 用户使用产品 B 的用户名和密码来登录产品 A。

2 产品 A 通过用户名和密码访问 B 开放平台授权服务来获取 access_token。

3 B 开放平台授权服务生成 access_token,返回给产品 A。

4 产品 A 获取到 access_token 之后就可以访问用户在 B 产品上的受保护资源。

应用场景:如果说产品 A 和产品 B 都属于同一家公司的官方出品,那么可以使用密码模式。

3.3 客户端模式

OAuth 2.0最佳实践_第3张图片

0 A 产品在 B 开放平台注册生成 client_id、client_secret。

1 A 产品通过 client_id、client_secret 向 B 开放平台授权获取 access_token。

2 B 开放平台授权服务向 A 产品返回 access_token。

3 A 产品通过 access_token 访问 B 开放平台受保护资源。

应用场景:如果说 A 产品访问的是 B 平台的开放资源,且该资源不属于任何一个第三方用户,那可以直接使用客户端模式。

3.4 简化模式

OAuth 2.0最佳实践_第4张图片

1 用户访问 A 产品,直接向 B 开放平台授权服务获取 access_token。

2 B 开放平台授权服务向用户返回 access_token。

3 用户通过 access_token 访问 B 开放平台受保护资源服务。

应用场景:

嵌入到浏览器端的应用且没有服务端,那就只能选择简化模式。

四 授权码模式详解

OAuth 2.0最佳实践_第5张图片

授权码模式主要有三个核心流程:授权页面、code 生成、token 签发。

4.1 授权页面

用户访问产品 A,A 产品引导用户用产品 B 进行授权,B 开放平台会对 A 客户端进行合法性校验、同时也需要对产品 B 的登录态进行验证,返回授权列表信息给用户。

4.2 code 生成

授权页面生成之后,用户点击授权,B 开放平台会对 A 客户端进行合法性校验、同时也需要对产品 B 的登录态进行验证,生成 code,返回给 A 客户端。

4.3 token 签发

A 客户端将 code 给到 A 服务端,A 服务端通过 code、client_id、client_secret 向 B 开放平台请求获取 access_token、refresh_token。B 开放平台验证 code、client_id、client_secret 的合法性,进行 token 签发。token 生成可以使用 JWT。

JWT 实现 token 认证_新猿一马的博客-CSDN博客目录一 什么是 JWT二 JWT 适用场景2.1 认证2.2 信息交换三 几种认证方式3.1 session 认证3.2 token 认证四 JWT 的数据结构4.1 header4.2 playload4.3 signature4.4 总结五 JWT 的使用方式六 JWT的优点七 JWT的使用注意八 JWT 等待解决的问题九 参...https://blog.csdn.net/jack1liu/article/details/92131519

五 授权码模式安全建设

5.1 业务安全

A 授权码 code 必须设置有效期,且只能使用一次。

B 页面进行重定向的时候需要对 URI 做安全校验。

C token 必须是有有效期的,access_token 有效期较短,refresh_token 有效期较长。access_token 过期后,refresh_token 进行续约,重新签发 access_token,此时 refresh_token 也需要更新。如果 refresh_token 也过期了,需要用户重新授权。

D 如果用户修改了账号密码或者对账号进行了注销,token 应该都失效。

5.2 传输安全

使用 HTTPS 协议进行通信保护传输数据的安全性。

你可能感兴趣的:(工作实践总结,java,oauth2.0,token,授权码)