安全矩阵

 找回密码
 立即注册
搜索
查看: 872|回复: 0

对于怎么都理解不了OAuth 2.0同学来说,你应该看一下这个...

[复制链接]

417

主题

417

帖子

2391

积分

金牌会员

Rank: 6Rank: 6

积分
2391
发表于 2023-9-17 20:13:14 | 显示全部楼层 |阅读模式
枇杷五星加强版 黑伞安全 2023-09-17 17:52 发表于北京
跟着下文一步步去做,再去参考https://portswigger.net/web-security/oauth,真的是可以起飞,参考一些java 开源项目,有时候会挖到一些认证相关的漏洞。
本文介绍Web应用如何通过OAuth 2.0扮演登录用户访问阿里云API。
前提条件
  • Web应用扮演登录用户访问阿里云首先需要创建应用,为应用提供恰当的名称、OAuth范围、回调地址等关键信息,详情请参见创建应用。应用创建成功后,您可以在应用列表中查看应用ID(client_id),如下图所示。




  • 说明

    应用创建成功之后,可以在阿里云账号内直接扮演用户。如果要扮演其他阿里云账号的用户,需要获得其他阿里云账号的授权。

  • 创建应用密钥,详情请参见创建应用密钥。应用密钥(client_secret)只在创建时显示,不支持查询,请妥善保管。




  • 用户通过浏览器登录Web应用。

  • Web应用重定向到阿里云OAuth 2.0服务并将URL返回给浏览器。

    说明

    如果用户还未登录,则会进一步重定向到阿里云登录服务。

  • 用户通过浏览器登录阿里云OAuth 2.0服务并申请授权码。

  • 阿里云OAuth 2.0服务重定向到Web应用并返回授权码给浏览器。

  • 浏览器通过Web应用使用授权码向阿里云OAuth 2.0服务申请代表用户身份的令牌。


    • 如何获取访问令牌,请参见获取访问令牌。

    • 如何获取新的访问令牌,请参见获取新的访问令牌。

    • 如何撤销刷新令牌,请参见撤销刷新令牌。


  • 阿里云OAuth 2.0服务向Web应用返回访问令牌(access_token)。

  • Web应用通过获取的访问令牌(access_token)向阿里云发起访问API的请求。

    说明

    由于访问令牌(access_token)可以代表用户身份,因此应用可以访问当前用户的资源。


获取访问令牌表 1. 请求参数

参数名称

是否必选

描述

client_id

应用ID。

redirect_uri

创建应用时填写的重定向URL之一。

response_type

返回类型。根据OAuth 2.0协议,目前支持设置此参数的取值为code。

scope

空格分隔的OAuth范围列表。如不指定此参数取值,则默认为应用的全部OAuth范围。

access_type

应用的访问类型。取值分为两种类型:

默认取值为online。

state

应用通过state 参数实现多种目的,例如:状态保持、作为nonce使用从而减少CSRF威胁等。state如果设置为任意字符串,阿里云OAuth2.0服务会将请求中的state参数及取值原样放到返回参数中以供后续使用。

prompt

该参数用于指定服务器是否需要提示用户进行授权操作。

如果指定,会强制要求用户进行授权,即使该阿里云账号已经做过授权,也需要重新授权。如果不指定,则只在该阿里云账号第一次使用该应用时要求授权。

取值:admin_consent,表示服务端会在向客户端返回信息之前展示授权页面。






请求示例

https://signin.aliyun.com/oauth2/v1/auth?
client_id=123****&
redirect_uri=https://example.com/authcallback/&
response_type=code&
scope=openid /acs/ccc&
access_type=offline&
state=123456****

返回示例

  1. GET HTTP/1.1 302 Found
  2. Location: https://example.com/authcallback/?code=ABAFDGDFXYZW888&state=123456****
复制代码


    • online:应用不需要离线刷新访问令牌。

    • offline:针对离线访问类型的请求,会发放刷新令牌,应用可以根据需求持续刷新访问令牌。


  • Web应用使用授权码向阿里云OAuth 2.0服务申请代表用户身份的令牌。

    换取访问令牌的请求地址:https://oauth.aliyun.com/v1/token


表 2. 请求参数

参数名称

是否必选

描述

code

初始请求中获取的授权码。

client_id

应用ID。

redirect_uri

初始请求中设置的参数。

grant_type

根据OAuth 2.0协议, 取值为authorization_code。

client_secret

应用密钥,用作换取访问令牌时鉴定应用身份的密码。




请求示例

POST /v1/token HTTP/1.1
Host: oauth.aliyun.com
Content-Type: application/x-www-form-urlencoded
code=ABAFDGDFXYZW888&
client_id=123****&
client_secret=`your_client_secret`&
redirect_uri=https://example.com/authcallback/&
grant_type=authorization_code表 3. 返回参数

参数名称

描述

access_token

访问令牌。

访问令牌可以代表用户身份,应用使用此访问令牌来访问阿里云API。应用不需要理解访问令牌的含义,直接使用即可。

expires_in

访问令牌的剩余有效时间,单位为秒。

token_type

访问令牌的类型。取值为Bearer。

id_token

身份令牌。

身份令牌为OAuth签名的JWT(JSON Web Token)。如果初始请求的scope参数包含了openid,则返回身份令牌。

refresh_token

刷新令牌。

如果初始请求时应用的访问类型为offline,则返回刷新令牌。

scope

获取的授权码的实际授权范围。

如果应用需要的授权范围不止openid,那么您需要校验获取的scope是否符合预期。

如果您安装的应用未授权指定的scope,请您重新授权。重新授权的方法:通过https://signin.aliyun.com/oauth2/v1/auth请求授权码时,设置参数prompt=admin_consent。


返回示例

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
  "token_type": "Bearer",
  "expires_in": "3600",
  "refresh_token": "Ccx63VVeTn2dxV7ovXXfLtAqLLERA****",
  "id_token": "eyJhbGciOiJIUzI1****",
  "scope": "openid /acs/ccc"
}

获取新的访问令牌

换取访问令牌的请求地址:https://oauth.aliyun.com/v1/token

表 4. 请求参数

参数名称

是否必选

描述

refresh_token

用授权码换取访问令牌时获得的刷新令牌。

client_id

应用ID。

grant_type

根据OAuth 2.0协议, 取值为refresh_token。

client_secret

应用密钥,用作换取访问令牌时鉴定应用身份的密码。


请求示例

POST /v1/token HTTP/1.1
Host: oauth.aliyun.com
Content-Type: application/x-www-form-urlencoded
refresh_token=Ccx63VVeTn2dxV7ovXXfLtAqLLERAH1Bc&
client_id=123****&
client_secret=`your_client_secret`&
grant_type=refresh_token表 5. 返回参数

参数名称

描述

access_token

新的访问令牌。应用可以使用新的访问令牌来访问阿里云API。

expires_in

访问令牌的剩余有效时间,单位为秒。

token_type

访问令牌的类型。取值为Bearer。

返回示例

{
  "access_token": "eyJraWQiOiJrMTIzNCIsImVu****",
  "token_type": "Bearer",
  "expires_in": "3600"
}撤销刷新令牌

Web应用获取了刷新令牌后,在用户退出登录应用或用户将自己的账号从应用中移除时,必须撤销刷新令牌。

撤销刷新令牌的请求地址:https://oauth.aliyun.com/v1/revoke

表 6. 请求参数

参数名称

是否必选

描述

token

需要撤销的刷新令牌。

client_id

应用ID。

client_secret

应用密钥。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-28 07:50 , Processed in 0.013803 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表