上云无忧 > 文档中心 > 腾讯云 API 网关 - OAuth2.0
腾讯云 API 网关 - OAuth2.0

文档简介:
操作场景: 该任务指导您在 API 网关控制台上为 API 配置 OAuth 2.0 授权访问,满足个性化安全设置的需求。
*此产品及展示信息均由腾讯云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

操作场景

该任务指导您在 API 网关控制台上为 API 配置 OAuth 2.0 授权访问,满足个性化安全设置的需求。

OAuth 2.0 说明

OAuth 2.0 是一个开放授权标准,它允许用户让第三方应用访问该用户在某服务的特定私有资源但是不提供账号密码信息给第三方应用。OAuth2.0 是一个授权协议,不是认证协议。

OAuth 2.0 角色

OAuth2.0 有以下四个角色:
角色
说明
腾讯云 API 网关
提供授权服务的中间方。
自定义业务 API
访问请求的最终服务后端,用于实际处理业务,由用户自定义。
客户端
用户自定义的客户端,或者第三方应用客户端,指任何可以消费的应用。
自定义授权 API
用于授权的服务 API,由用户自定义。

OAuth 2.0 授权流程


提前准备
1.客户端的访问者,请求获得授权。 2.提供服务的自定义业务 API 资源的所有者,同意授权。
系统访问时的时序流程
1.客户端申请认证请求,到达腾讯云 API 网关。
2.申请认证请求,从腾讯云 API 网关到达用户自定义授权服务的 API,在授权服务中验证请求并生成私钥加密后的 token。
3.认证成功,自定义授权服务响应 token 给腾讯云 API 网关。
4.腾讯云 API 网关响应 token 给客户端。
5.客户端携带 token 继续请求业务 API。
6.腾讯云 API 网关使用公钥验证 token。验证成功则将业务请求到用户自定义的业务 API。
7.用户自定义业务 API 响应业务结果,返回到腾讯云 API 网关。
8.腾讯云 API 网关将业务结果响应到客户端。

前提条件

准备分发 token 的授权服务器(您需要自建授权服务器,API 网关提供了 Python3 DemoGolang Demo 供您参考)。
已经创建一个 API 网关服务(参见 创建服务)。

操作步骤

步骤1:授权服务器的搭建(以 Python3 Demo 为例)

1. 在 API 网关官方仓库中下载 Python3 Demo
2. 生成 RSA 公钥和私钥。使用 Python3 运行 produce_key.py,生成三个文件:
public_pem :pem 格式的公钥。
priv_pem :pem 格式的私钥。
public :json 格式的公钥,该文件的内容用于配置 API 网关的授权 API。具体格式如下:

		

{"e":"AQAB","kty":"RSA","n":"43nSuC6lmGLogEPgFVwaaxAmPDzmZcocRB4Jed_dHc-sV7rcAcNB0iH

yuGfNkfOAE2uhHVjdXuO6DBYGz4pnTwRZ5_wFrW0DlrlJQAXSvg6B2N1uda_aqySNw3rrvdh38rVG7HxFmyP

bLXcpJtyfkiRNyZ1WhSpH0NciIRrFbW2mKRtOZsBGfBgmNqPGcGrMA71cuqNAQ9RMKmAF37iGXkx0tWMBQ_

PL2aviHhtsiPbT3zIO7qUG3cleBHnS61kid3K8F38z9-5Hj-1zdTIP8iS4rAt4FmhvKvtOocRPYGq0W_

dLLxmi4DYgIV2GJE93WyZ1EUvgRGhpcHvyT65z4w"}

3. 启动服务。安装 bottle 库、pip3 install bottle 后,使用 Python3 运行 server.py。server.py 用于提供 token,执行后可以简单验证生成 token是否成功。

		
curl localhost:8080/token

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTIyNzgwODksImZvbyI6ImJhciIsImlhdCI6MTU5

MjI3Nzc4OSwianRpIjoibFY1TS10S2oxMEdtV0pJcHotM01GUSIsIm5iZiI6MTU5MjI3Nzc4OSwid3VwIjo5MH0.

aHyZo2jgkNxVRDMtEiRBU4-n0pMfa0gocu92KQBe-nmbFoeI_5EWTJ8XFNnSIuoCAIFvrd9MSUX2DNVTg0woXukj

oKOTjZSx4txknaXs1aApdvW74FVddCrMtdLrKh_VlwPOrEaOGesmtfcR3RN8xWnj1oedPW-HKPEqVpIAIIWO8ilC

BFF-5yffcnFGIbfYO0t7OeBBviCQnQjWAmQHnteOZm0CBeG22k7rlnjH96qE_kyq7DHQqGmURjlpGxoXRC6E-Ai

V-3mYrCGnsAosEltuIUtq8VIbTZabSobFDE92C8us4GFtIVJQB2NWgeB3Hxgpz3Dlb4NCCcCkZbryEQ

步骤2:新建 API 作为授权 API

1. 在已创建的服务中,新建 API(参见 创建通用 API),前端配置时,鉴权类型选择 OAuth2.0,OAuth 模式选择授权API

2. 后端配置时,后端域名选择自己的个人服务器地址,token携带位置选择 Header公钥输入执行文件 produce_key.py 生成的 public 文件中的内容,创建完成后单击完成

步骤3:新建API作为业务 API

1. 在授权 API 的同一个服务中,新建 API(参见 创建通用 API)作为业务 API,前端配置时,鉴权类型选择 OAuth2.0OAuth 模式选择业务API,关联授权 API 下拉选择刚刚创建的授权 API。

2. 后端配置时,后端类型选择 Mock 类型,在 body 中输入hello world

步骤4:验证

1. 请求授权 API,获取 token。
		
curl http://service-cmrrdq86-1251890925.gz.apigw.tencentcs.com:80/token
返回结果:

		

eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTIyNzk3MTAsImZvbyI6ImJhciIsI

mlhdCI6MTU5MjI3OTQxMCwianRpIjoiZlBGYlFZRkR4REx3d0lXTFl0aHBBQSIsIm5iZiI6MTU5MjI

3OTQxMCwid3VwIjo5MH0.0JQquNRVCQ8n9hPV-mJi6Mku_7G3T1jFp68Sk2AYBijpzzBMQ1KOcREyo

9G6QOpvdctynGOAPkL3cwqeTzkFhWgGj633pu_MdLjlectEBMGyVQIv6pL8OBMCHMQzTUTpHWJ_NoU

kLpRLKGqZFFcXW8q7v4KeCbf8xHUa9OCH5VF2JxYOnFWDVgucSqao06r0Jaq64LDwKIhLw77ujheKpc

BjRrf1kqoIpqk2qhb8CzxM36g_DawMadzKmX49dT-k7auNnI2xUtu5CZdXZ3lSmLeicXfGjc66rrH_

acqUqipZRKeeQ5F3Ma467jPQaTeOKiCMHwS2_yp-sXNU2GzxOA

说明
您可通过两种方式获取token:为保护授权服务器本身,本文采用了请求 API 网关的授权 API 地址来获取 token;您也可以直接从授权服务器快速获取 token。
2. 使用已获取的 token 请求业务 API,可以看到, 能够成功请求。

		

curl http://service-cmrrdq86-1251890925.gz.apigw.tencentcs.com:80/work -H'Authorization

:Bearer id_token="eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1OTIyNzk3MTAsImZvbyI6I

mJhciIsImlhdCI6MTU5MjI3OTQxMCwianRpIjoiZlBGYlFZRkR4REx3d0lXTFl0aHBBQSIsIm5iZiI6MTU5MjI3O

TQxMCwid3VwIjo5MH0.0JQquNRVCQ8n9hPV-mJi6Mku_7G3T1jFp68Sk2AYBijpzzBMQ1KOcREyo9G6QOpvdcty

nGOAPkL3cwqeTzkFhWgGj633pu_MdLjlectEBMGyVQIv6pL8OBMCHMQzTUTpHWJ_NoUkLpRLKGqZFFcXW8q7v4K

eCbf8xHUa9OCH5VF2JxYOnFWDVgucSqao06r0Jaq64LDwKIhLw77ujheKpcBjRrf1kqoIpqk2qhb8CzxM36g_Da

wMadzKmX49dT-k7auNnI2xUtu5CZdXZ3lSmLeicXfGjc66rrH_acqUqipZRKeeQ5F3Ma467jPQaTeOKiCMHwS2

_yp-sXNU2GzxOA"'

返回结果:
		
hello world

使用授权码的方式获取 token

以上示例中可以看到,获取 token 时并没有使用授权码进行获取,为了确保指定的用户才能获取到 token,根据授权流程,需要有一个步骤需去资源拥有者那里获取授权码,从 server.py 文件中可以看到,可以第一步请求 code 路径获取授权码,而同时获取 token 的时候,需要对发放的 code 进行登记,判断是否合法。
相似文档
  • CAM基本概念: 根账户通过给子账户绑定策略实现授权,策略设置可精确到 [API,资源,用户/用户组,允许/拒绝,条件] 维度。
  • 操作场景: 该任务指导您通过腾讯云 API 网关控制台,查看有关 API 网关服务的请求的日志。
  • 操作场景: 本文指导您通过 API 网关控制台导出服务日志,便于您更加灵活的进行数据分析和问题定位。
  • 操作场景: 该任务指导您通过 云审计控制台,查询、下载 API 网关的操作记录。 云审计(CloudAudit) 是一项支持对您的腾讯云账号进行监管、合规性检查、操作审核和风险审核的服务。CloudAudit 提供腾讯云账号活动的事件历史记录,这些活动包括通过腾讯云管理控制台、API 服务、命令行工具和其他腾讯云服务执行的操作。这一事件历史记录可以简化安全性分析、资源更改跟踪和问题排查工作。
  • 操作场景: API 网关支持记录客户端访问日志,通过访问日志可以帮助您了解客户端请求、辅助排查问题、分析梳理用户行为等。 API 网关控制台提供了基础的日志看板,您可以直接在控制台查看、检索日志;API 网关也提供了投递日志到 日志服务 CLS 的能力,以便于您通过日志服务进行多维度的统计分析。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部