OAuth2简介

来源博客:https://blog.csdn.net/weixin_39556811/article/details/111617313

一、OAuth2.0 是什么?

OAuth 简单理解就是一种授权机制,它是在客户端和资源所有者之间的授权层,用来分离两种不同的角色,在资源所有者同意并向客户端颁发令牌后,客户端携带令牌可以访问资源所有者的资源。

OAuth2.0 是OAuth 协议的一个版本,OAuth2.0 不向下兼容OAuth1.0

举个栗子解释一下什么是 OAuth 授权?
在家肝文章饿了定了一个外卖,外卖小哥30秒火速到达了我家楼下,奈何有门禁进不来,可以输入密码进入,但出于安全的考虑我并不想告诉他密码。此时外卖小哥看到门禁有一个高级按钮“一键获取授权”,只要我这边同意,他会获取到一个有效期 2小时的令牌(token)正常出入。
在这里插入图片描述

二、OAuth2.0 授权方式

OAuth2.0 的授权简单理解其实就是获取令牌(token)的过程,OAuth 协议定义了四种获得令牌的方式

  • 授权码(authorization-code)
  • 隐藏式(implicit)
  • 密码式(password)
  • 客户端凭证(client credentials)

但值得注意的是,不管我们使用哪一种授权方式,在第三方应用申请令牌之前,都必须在系统中去申请身份唯一标识:客户端 ID(client ID)和 客户端密钥(client secret)。这样做可以保证 token 不被恶意使用。
下面我们会分析每种授权方式的原理,在进入正题前,先了解 OAuth2.0 授权过程中几个重要的参数:

  • response_type:code 表示要求返回授权码,token 表示直接返回令牌
  • client_id:客户端身份标识
  • client_secret:客户端密钥
  • redirect_uri:重定向地址
  • scope:表示授权的范围,read只读权限,all读写权限
  • grant_type:表示授权的方式,AUTHORIZATION_CODE(授权码)、password(密码)、client_credentials(凭证式)、refresh_token 更新令牌
  • state:应用程序传递的一个随机数,用来防止CSRF攻击。

1、授权码

OAuth2.0四种授权中授权码方式是最为复杂,但也是安全系数最高的,比较常用的一种方式。这种方式适用于兼具前后端的Web项目,因为有些项目只有后端或只有前端,并不适用授权码模式。

社交登录是授权码模式常用的一个实例

下图我们以用WX登录掘金为例,详细看一下授权码方式的整体流程。
在这里插入图片描述
1)用户选择WX登录掘金,掘金会向WX发起授权请求,接下来 WX询问用户是否同意授权(常见的弹窗授权)

https://wx.com/oauth/authorize?response_type=code&client_id=CLIENT_ID
                              &redirect_uri=http://juejin.im/callback&scope=read

response_type 为 code 要求返回授权码
scope 参数表示本次授权范围为只读权限
redirect_uri 为授权成功后重定向到掘金的地址

2)用户同意授权后,WX 根据 redirect_uri重定向并带上授权码

http://juejin.im/callback?code=xxxx

3)当掘金拿到授权码(code)时,带授权码和密匙等参数向WX申请令牌

https://wx.com/oauth/token?client_id=xxx&client_secret=xxx
&grant_type=authorization_code&code=xxx&redirect_uri=http://juejin.im/callback

grant_type表示本次授权为授权码方式authorization_code
获取令牌要带上客户端密匙 client_secret,授权码 code

4)最后 WX 收到请求后向 redirect_uri 地址发送 JSON 数据,其中的access_token 就是令牌;
最后,掘金可以通过access_token 访问资源用户在微信的一些数据

 {      "access_token":"ACCESS_TOKEN",  
        "token_type":"bearer",  
        "expires_in":2592000,  
        "refresh_token":"REFRESH_TOKEN",  
        "scope":"read",  
        ......}

2、隐藏式

如果Web应用是没有后端的, 属于纯前端应用,无法用上边的授权码模式。令牌的申请与存储都需要在前端完成,跳过了授权码这一步。
前端应用直接获取 token,response_type 设置为 token,要求直接返回令牌,跳过授权码,WX授权通过后重定向到指定 redirect_uri

https://wx.com/oauth/authorize?
     response_type=token&client_id=xxx&redirect_uri=http://juejin.im/callback&scope=read                     

3、密码模式

用户在掘金直接输入自己的WX用户名和密码,掘金拿着信息直接去WX申请令牌,请求响应的 JSON结果中返回 token
grant_type 为 password 表示密码式授权。

https://wx.com/token?grant_type=password&username=xxx&password=xxx&client_id=xxx&client_secret

这种授权方式缺点是显而易见的,非常的危险,如果采取此方式授权,该应用一定是可以高度信任的

4、客户端模式

凭证式和密码式很相似,主要适用于那些没有前端的命令行应用,可以用最简单的方式获取令牌,在请求响应的 JSON 结果中返回 token
grant_type 为 client_credentials 表示凭证式授权,client_id 和 client_secret 用来识别身份

https://wx.com/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET

三、令牌的使用与更新

1、令牌怎么用?

拿到令牌可以调用 WX API 请求数据了,那令牌该怎么用呢?
每个到达WX的请求都必须带上 token,将 token 放在 http 请求头部的一个Authorization字段里

2、令牌过期怎么办?

token是有时效性的,一旦过期就需要重新获取,但是重走一遍授权流程,不仅麻烦而且用户体验也不好,那如何让更新令牌变得优雅一点呢 ?

一般在颁发令牌时会一次发两个令牌,一个令牌用来请求API,另一个负责更新令牌 refresh_token。grant_type 为 refresh_token 请求为更新令牌,参数 refresh_token 是用于更新令牌的令牌

https://wx.com/oauth/token?grant_type=refresh_token&client_id=xxx
               &client_secret=xxx&refresh_token=xxx
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Security 是一个强大的安全框架,可以用于保护 Spring 应用程序中的资源。OAuth 是一种授权机制,可以用于保护 Web 应用程序中的资源。本文将介绍 Spring Security 和 OAuth 的相关知识和技术,以及如何在应用程序中使用它们。 一、Spring Security 1.1 Spring Security 简介 Spring Security 是一个强大的安全框架,可以用于保护 Spring 应用程序中的资源。Spring Security 提供了多种安全特性,如认证、授权、加密等。通过使用 Spring Security,我们可以轻松地保护应用程序中的资源,如 URL、方法、服务等。 1.2 Spring Security 特性 Spring Security 提供了多种安全特性,如认证、授权、加密等。以下是 Spring Security 的一些主要特性。 (1)认证:通过认证机制,可以验证用户是否具有访问资源的权限。Spring Security 提供了多种认证方式,如表单认证、HTTP 基本认证、LDAP 认证等。 (2)授权:通过授权机制,可以限制用户对资源的访问权限。Spring Security 提供了多种授权方式,如基于角色的授权、基于权限的授权等。 (3)加密:通过加密机制,可以保护用户的敏感信息。Spring Security 提供了多种加密方式,如 MD5、SHA、BCrypt 等。 (4)会话管理:通过会话管理机制,可以管理用户的会话信息,如会话超时时间、会话 ID 等。 (5)注解支持:通过注解机制,可以在代码中使用注解来控制资源的访问权限。 1.3 Spring Security 实现原理 Spring Security 的实现原理主要是通过过滤器链来实现的。当请求到达应用程序时,Spring Security 会拦截请求,并根据配置的过滤器链来判断请求是否合法。如果请求合法,则允许请求通过,否则拒绝请求。 二、OAuth 2.1 OAuth 简介 OAuth 是一种授权机制,可以用于保护 Web 应用程序中的资源。OAuth 主要用于授权第三方应用程序访问用户的资源。例如,当我们使用第三方登录时,需要使用 OAuth 机制来保护用户的隐私信息。 2.2 OAuth 2.0 OAuth 2.0 是 OAuth 的一个升级版本,主要用于 Web 应用程序中的资源保护。OAuth 2.0 相比于 OAuth 1.0,有以下几个改进。 (1)简化了流程:OAuth 2.0 简化了授权流程,使得开发者可以更容易地实现 OAuth 机制。 (2)支持多种认证方式:OAuth 2.0 支持多种认证方式,如授权码模式、密码模式、客户端模式等。 (3)支持多种授权方式:OAuth 2.0 支持多种授权方式,如基于角色的授权、基于权限的授权等。 2.3 OAuth 2.0 实现原理 OAuth 2.0 的实现原理主要是通过授权服务器和资源服务器来实现的。当第三方应用程序请求访问用户的资源时,需要经过授权服务器的认证和授权,然后才能访问用户的资源。授权服务器的认证和授权主要是通过 OAuth 2.0 的认证和授权流程来实现的。 三、Spring Security 和 OAuth 的整合 3.1 Spring Security OAuth Spring Security OAuth 是 Spring Security 的一个扩展,可以用于实现 OAuth 2.0 授权机制。Spring Security OAuth 提供了多种认证方式和授权方式,可以轻松地实现 OAuth 2.0 授权机制。 3.2 Spring Security 和 OAuth 的整合 Spring Security 和 OAuth 的整合可以使用 Spring Security OAuth 来实现。以下是 Spring Security 和 OAuth 的整合步骤。 (1)引入 Spring Security OAuth 依赖。 (2)配置 OAuth 2.0 客户端信息。 (3)配置 Spring Security OAuth 2.0 认证服务器。 (4)配置 Spring Security OAuth 2.0 资源服务器。 (5)在应用程序中使用 OAuth 2.0 认证机制。 四、案例及开源链接 以下是一个基于 Spring Security 和 OAuth 的案例及其开源链接。 4.1 Spring Security 和 OAuth2.0 实现基于 Github 的第三方登录 该案例基于 Spring Security 和 OAuth2.0 实现了基于 Github 的第三方登录。用户可以使用 Github 账号登录应用程序,而无需再次进行注册。开源链接:https://github.com/spring-guides/tut-spring-security-and-angular-js/tree/master/oauth2-github 五、总结 本文介绍了 Spring Security 和 OAuth 的相关知识和技术,以及如何在应用程序中使用它们。通过使用 Spring Security 和 OAuth,我们可以轻松地保护应用程序中的资源,保护用户的隐私信息。在实际开发中,我们应该根据具体情况选择合适的认证方式和授权方式,以保证应用程序的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值