Oauth2.0的4种登录方式

本文详细介绍了Oauth2.0的四种登录方式:Authorization Code Grant(第三方授权登录)、Implicit Grant(隐式授权)、Password Credentials Grant(用户密码授权)和Client Credentials Grant。重点解析了Authorization Code Grant的工作流程,强调了其安全性。

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

Oauth2.0的4种登录方式


笔者使用Oauth2.0有一段时间了,网上的很多文章都只是描述了Oauth2.0其中的一种登录方式--第三方授权登录,然而Oauth2.0的RFC 6749文件中,明确指出了Oauth2.0的四种登录方式:

1.Authorization Code Grant授权方式(第三方授权登录)

这是最常见的一种登录方式,登录的原理图如下:

输入图片说明

(A)首先浏览器(上图显示为User Agent)将资源拥有者引导到认证节点(认证服务器),客户端(Client)包含了客户端的标识符、请求的范围、生成的status字段(用于避免csrf攻击),以及一个回调地址用于接收认证码(Authorization Code),认证服务器完成了鉴权操作后会调用这个回调URI

(B)通过浏览器,认证服务器验证了用户发过来的认证信息(用户名、密码),判断用户是否同意授权访问该资源。

(C)我们假设用户同意了访问特定资源的请求,认证服务器会向浏览器发送302跳转,引导浏览器跳转到步骤A所提供的回调URI,这个跳转会包含一个授权码(Authorization Code),以及在步骤A中提供的status字段。

(D)客户端(client)获取到授权码(Authorization Code)后,带上授权码(Authorization Code)向认证服务器发起获取access token的请求,同时在请求中带上了一个回调地址,该回调地址就是步骤C中的回调地址URI

(E)认证服务器校验了客户端的授权码(Authorization Code),以及确保了回调URI地址与步骤C中的回调URI一致时,认证服务器会返回一个access token

备注:

(1)上述的Authorization Code可以实现更加安全的避免中间人攻击,即使Authorization Code被截获了,依然不能获取到有效的access tokenm,因为认证服务器要秋特定的client Id加上Authorization Code才能获取access token,所以即使Authorization Code被黑客截获,也无法获取到access token,因为认证服务器只想特定的回调URI返回access token。

2.Implicit Grant(隐式授权)

使用该授权方式的客户端(Client)必须预先在认证服务器注册回调URI,详情见https://tools.ietf.org/html/rfc6749#section-3.1.2.2

原理图如下:

输入图片说明

3.Password Credentials Grant(用户密码授权)

这种登录方式和我们平时使用的用户名与密码登录方式类似,原理图如下:

输入图片说明

(A)用户把自己的username和password告诉客户端(Client)。

(B)客户端带上client_id、client_secret、username、password、scope(可选)等参数向认证服务器发起请求。

(C)认证服务器返回客户端(Client)一个access-token

注意:上述步骤(B)中client_id、client_secret是用于客户端(Client)的认证,保证这个客户端是一个认证的客户端。客户端认证的具体用途请查看Client Authentication

4.Client Credentials Grant

这种授权方式一般用于安全的客户端获取access token,这种方式只能用于安全可信赖的Client端

输入图片说明

(A)用户直接向认证服务器发起请求

(B)认证服务器对客户端的认证信息进行校验,如果合法就通过认证,返回access token

转载于:https://my.oschina.net/cloes/blog/894161

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值