c语言编程笔录

首页 >   > 笔记大全

笔记大全

OAuth20的授权方式有哪些

更新时间:2023-12-19

OAuth2.0简介

OAuth(开放授权)是一个授权框架,它允许用户允许第三方应用访问他们在另一个服务上的资源,而不必暴露他们的密码。OAuth 2.0 是OAuth的下一代版本,它提供了更多的授权方式,更加灵活,更加安全

OAuth2.0授权方式

OAuth2定义了多种授权方式:授权码模式、简化模式、密码模式和客户端凭据模式。其中,授权码方式是最安全、最常用的一种方式,它的工作流程如下:

//client_id和client_secret由服务端分配给客户端
//redirect_uri是客户端注册时提供的,必须经过服务端授权,确保客户端不可能使用其他人注册的uri
//response_type告诉授权服务器应该以何种方式向客户端应答,这里指authorization code
//scope告诉授权服务器请求的资源范围,一般以空格分隔多个值
//state客户端生成的随机值,用于防止CSRF攻击

//1、客户端向授权服务器发起授权请求
GET /authorize?response_type=code&client_id=xxx&redirect_uri=xxx&scope=xxx&state=xxx HTTP/1.1
Host: oauth.example.com

//2、授权服务器向用户发起授权请求
//用户输入账号密码,确认授权

//3、授权服务器向客户端重定向,返回授权码,此处描述代码是客户端接收到响应,然后用授权码向令牌服务器请求访问令牌
GET /auth_response?code=xxx&state=xxx HTTP/1.1
Host: client.example.com

简化模式

简化模式是OAuth2.0的一种非常常见的授权方式。它省去了步骤一授权请求,将令牌放在重定向URI的查询参数中返回给客户端,常用于Web应用中。它的工作流程如下:

//redirect_uri是由服务端注册验证的,以确保客户端不会使用其他人注册的uri进行操作
//response_type是必须的,直接返回access token
//scope告诉授权服务器请求的资源范围,一般以空格分隔多个值
//state在简化模式中也是可选的

//1、客户端向授权服务器发起简化请求
GET /authorize?response_type=token&client_id=xxx&redirect_uri=xxx&scope=xxx&state=xxx HTTP/1.1
Host: oauth.example.com

//2、授权服务器向客户端重定向,并直接将访问令牌返回给客户端
GET /callback#access_token=xxx&token_type=Bearer&expires_in=3600&state=xxx HTTP/1.1
Host: client.example.com

密码模式

密码模式的使用场景较为单一,只有某些受信任的客户端可以以此方式获取access token。客户端需要知晓用户的用户名和密码,然后直接向授权服务器请求access token。工作流程如下:

//grant_type表示授权类型为密码模式
//client_id表示在授权服务器注册的客户端id
//client_secret由服务端分配给客户端
//username和password表示用户的账号和密码

//1、客户端向授权服务器请求访问令牌
POST /token HTTP/1.1
Host: oauth.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=password&client_id=xxx&client_secret=xxx&username=xxx&password=xxx

//2、授权服务器向客户端返回结果
HTTP/1.1 200 OK
Content-Type: application/json
cache-control: no-store
Pragma: no-cache

{
  "access_token":"xxx",
  "token_type":"Bearer",
  "expires_in":3600,
  "refresh_token":"xxx"
}


客户端凭据模式

客户端凭据模式允许客户端使用自己的凭证直接向令牌服务器获取access token,适用于客户端直接请求资源服务器。工作流程如下:

//grant_type表示授权类型为客户端凭据模式
//client_id和client_secret由授权服务器分配给客户端
//scope表示需要访问的资源范围

//1、客户端向授权服务发送请求
POST /token HTTP/1.1
Host: oauth.example.com
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&client_id=xxx&client_secret=xxx&scope=xxx

//2、授权服务器向客户端返回结果
HTTP/1.1 200 OK
Content-Type: application/json
cache-control: no-store
Pragma: no-cache

{
  "access_token":"xxx",
  "token_type":"Bearer",
  "expires_in":3600
}

总结

本文介绍了OAuth2.0的四种主要授权方式:授权码模式、简化模式、密码模式和客户端凭据模式。授权码模式是最常用的方式,也是最安全的方式,其他三种方式需要根据使用场景而定。在具体使用过程中,应根据实际情况进行选择,保护资源的安全,确保授权操作的合法性。

返回内容请查看源代码。