oauth2四种模式的流程图

本文详细介绍了OAuth的四种授权模式:授权码模式、简化模式(隐藏式)、密码模式和客户端模式。授权码模式适用于有后台应用的情况,安全性高;简化模式常用于前后端分离的场景,但令牌存储在前端存在安全隐患;密码模式适用于内部系统,用户密码会经过客户端;客户端模式则用于后台服务之间的认证。理解这些模式有助于构建和选择合适的第三方认证平台。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参照https://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

以下为自己的理解整理,授权码和密码模式是用户使用第三方平台账号授权给客户端应用,来获取受第三方平台保护的用户信息,完成在客户端自动注册的过程;简化模式是用户使用第三方账号,通过客户端前端程序去第三方平台获取受保护的用户信息,并保存在用户代理端(浏览器、APP);客户端模式主要完成用户请求客户端服务时,客户端需要调用其他系统的服务(微服务接口)来获取其他系统受保护的资源。

一、授权码模式

 二、简化模式(隐藏式)

三、密码模式

四、客户端模式

五、总结

1、授权码,适合客户端有后台应用可存储token信息的情况,token存放在客户端的后台,安全性最高,适合外部用户登录访问。

2、简化模式(隐藏式),客户端client无后台应用(前后端分离后,用户直接访问前端程序),访问的令牌需要保存在前端(如浏览器),不安全,令牌有效期不能太长了。

3、密码模式,因为用户名和密码需要提交给客户端(client),不太安全,适合对client应用相当信任的场景,比如公司内部用户访问公司内部系统。

4、客户端模式,不需要用户授权,适合后台服务间的认证和访问。

5、使用spring security oauth2,实现自己的第三方认证平台。

### OAuth 2.0 授权流程详解 OAuth 2.0 是一种广泛使用的协议,用于授权第三方应用程序访问用户的资源而不暴露用户凭证。以下是对其授权流程的详细解释: #### 1. 主要角色定义 OAuth 2.0 的授权过程涉及四个主要角色: - **Resource Owner (资源拥有者)**:通常是最终用户。 - **Client (客户端)**:希望获取用户资源的应用程序。 - **Authorization Server (授权服务器)**:负责验证用户身份并向客户端颁发访问令牌。 - **Resource Server (资源服务器)**:存储受保护资源并依赖访问令牌提供资源。 这些角色之间的交互确保了安全性与隐私性[^1]。 #### 2. 基本授权流程概述 OAuth 2.0 提供了几种不同的授权模式(Grant Types),其中最常见的两种是 **授权码模式 (Authorization Code Grant Type)** 和 **隐式模式 (Implicit Grant Type)**。以下是基于授权码模式的核心流程描述: 1. 客户端引导用户至授权服务器请求权限。 2. 用户在授权服务器上完成身份验证,并批准或拒绝客户端的访问请求。 3. 如果用户同意,则授权服务器重定向回客户端,并附带一个临时授权码。 4. 客户端向授权服务器发送该授权码以及自身的密钥,交换永久访问令牌。 5. 资源服务器接收到访问令牌后验证其有效性,并返回相应的资源给客户端。 这一系列操作构成了完整的 OAuth 2.0 授权机制[^1]。 #### 3. Spring Cloud 中实现 OAuth 2.0 授权服务器 在 Java 开发环境中,Spring Cloud 提供了一套强大的工具链来简化 OAuth 2.0 的集成。例如,在构建授权服务器时可以使用 `@EnableAuthorizationServer` 注解标记类,并通过扩展 `AuthorizationServerConfigurerAdapter` 来定制化配置逻辑[^2]。 以下是一个简单的示例代码片段展示如何设置基本的授权服务功能: ```java @Configuration @EnableAuthorizationServer public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter { @Override public void configure(ClientDetailsServiceConfigurer clients) throws Exception { clients.inMemory() .withClient("client-id") .secret("{noop}client-secret") // 使用明文密码 {noop} .authorizedGrantTypes("authorization_code", "refresh_token") .scopes("read", "write"); } @Bean public PasswordEncoder passwordEncoder() { return new BCryptPasswordEncoder(); } } ``` 这段代码展示了如何注册一个内存中的客户端详情信息,并指定允许的授予权限类型和作用域范围[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值