临时授权访问
STS简介
TableStorage可以通过STS机制实现第三方的临时授权访问。STS(Security Token Service)是百度智能云提供的临时授权服务。通过STS,您可以为第三方用户颁发一个自定义时效和权限的访问凭证。第三方用户可以使用该访问凭证直接调用百度智能云的API访问百度智能云资源。
说明:这里的第三方用户主要是指您所开发的应用程序的终端用户,例如,您是移动App开发者,您的App终端用户我们称为第三方用户。
STS鉴权流程
为了让移动终端能够便捷、安全地享受到TableStorage服务,百度智能云研发了STS服务,来对移动场景下的安全需求进行支持。您无需开放自己的AK/SK,仅通过STS即可实现临时授权。以移动客户端访问TableStorage服务为例,使用STS为APP客户端临时授权的流程如下图所示:
-
申请访问TableStorage权限。
App客户端访问TableStorage资源,需向AppServer申请访问权限。已经开通TableStorage服务的AppServer可以针对不同的App终端用户进行授权及访问资源限制。
-
申请临时访问凭证。
AppServer需要向STS服务申请一个临时访问凭证。AppServer通过调用STS的GetSessionToken()接口进行申请,同时需要指定资源访问权限和过期时间。GetSessionToken()的调用方法请参考STS服务接口。
-
返回STS凭证给AppServer。
STS处理申请后,返回给AppServer一份临时的身份凭证(Credential),包括临时访问密钥AK/SK, SessionToken、失效时间和AppServer的用户ID等信息。AppServer可以缓存STS凭证,当多个App客户端需要的权限相同时,可以直接把缓存的凭证颁发给客户端。
-
返回STS凭证给App客户端。
AppServer将收到的STS凭证下发给App客户端,App客户端可以缓存STS凭证。当凭证失效时,App客户端需要向AppServer重新申请有效访问凭证。
-
App客户端使用STS凭证访问TableStorage资源。
App客户端设备可以直接使用返回的STS凭证构造API请求直接访问TableStorage资源,TableStorage会感知STS访问凭证,并会依赖STS服务来验证访问凭证,正确响应用户请求。
使用STS的优点
使用STS访问主要有以下优点:
- 您不需要向第三方用户透露您的管理账号或AK/SK信息,您只需要向STS申请一个临时访问凭证并颁发给第三方用户即可,且这个访问凭证拥有的权限和有效期均可由您自己去定义。
- 您不需要关注该权限的撤销问题,临时访问凭证在过期后会自动失效。
STS服务接口
接口描述
GetSessionToken接口用于临时授权访问时,请求返回一份临时的访问凭证(Credential)。
权限说明
请求发起人需要具有合法的AccessKeyID和SecretAccessKey才能发起请求。
请求
-
请求语法
POST /v1/sessionToken HTTP/1.1 Host: sts.bj.baidubce.com Date: <Date> Authorization: <Authorization_String>
-
请求参数
名称 描述 默认值 是否必选 durationSeconds 临时访问凭证的有效时长。数据类型:int。单位为秒,最长可指定为129600秒(36小时)。 43200(12小时) 否 -
请求头域
名称 数据类型 描述 默认值 是否必选 Authorization string 认证字符串,计算方法请参考生成认证字符串。 - 是 -
请求元素
本接口的请求元素是权限控制的主要部分。请求元素由一条或多条acl配置项组成,每条acl配置项间相互独立。
名称 是否必选 数据类型 描述 父标签 id 否 string acl的标识符。 - accessControlList 是 list 标识acl主体的开始,由一或多组acl配置项组成。 - +effect 是 string 指定与该条acl配置项匹配的Request能否执行,取值为 Allow
或Deny
。Allow
表示可以执行;Deny
表示拒绝执行。accessControlList +eid 否 string 标识acl配置项的id 。 accessControlList +permission 是 list acl配置项所影响的权限。 accessControlList +region 是 string acl配置项影响的区域,"_"表示所有区域。 accessControlList +resource 是 list acl配置项所影响的资源,支持通配符。TableStorage仅支持instance级别的资源,格式为:instance/ 或instance/xxx_ accessControlList +service 是 string acl配置项影响的服务组件,"*"表示所有服务。以TableStorage为例,取值为"bce:bts" accessControlList 其中,permission有以下几种:
permission 实例操作权限 表操作权限 行操作权限 FULL_CONTROL - 列举实例
- 显示实例信息
- 创建实例
- 删除实例- 创建表
- 删除表
- 显示表信息
- 列举所有表- 单条写入
- 批量写入
- 单条删除
- 批量删除
-随机读
- 批量读
- 区间读OPERATE - 列举实例
- 显示实例信息- 创建表
- 删除表
- 显示表信息
- 列举所有表- 单条写入
- 批量写入
- 单条删除
- 批量删除
- 随机读
- 批量读
- 区间读READ - 列举实例
- 显示实例信息-显示表信息
- 列举所有表- 随机读
- 批量读
- 区间读
注意:
- 由于GetSessionToken的响应结果会包含STS凭证,强烈建议通过HTTPS协议调用。
- 如在请求元素中不指定acl,则默认返回的临时权限Credential与您当前拥有的权限相同,授权给第三方用户后,可能会给您的账户资源带来风险,建议您在临时授权时明确指定acl,规避风险。
响应
-
响应头域
本接口只用到了公共响应头。
-
响应元素
名称 数据类型 描述 accessKeyId string 用于STS凭证访问的AK。 expiration date 访问失效时间。 secretAccessKey string 用于STS凭证访问的SK。 sessionToken string SessionToken,使用STS凭证访问时必须携带。 userId string 您的用户ID。
示例
-
请求示例
POST /v1/sessionToken HTTP/1.1 Host: sts.bj.baidubce.com Date: Wed, 06 Apr 2016 06:34:40 GMT Authorization: AuthorizationString Content-type:application/json Content-Length:178 { "id":"10eb6f5ff6ff4605bf044313e8f3ffa5", "accessControlList": [ { "eid":<eid>, "service":"bce:bts", "region":"bd", "effect": "Allow", "resource": ["instance/instance1", "instance/instance2"], "permission": ["READ"] }, { "eid":<eid>, "service":"bce:bts", "region":"bd", "effect": "Allow", "resource": ["instance/instance3", "instance/instance4"], "permission": ["OPERATE"] } ] }
-
响应示例
HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Content-Type: application/json;charset=UTF-8 Date: Wed, 06 Apr 2016 06:34:40 GMT { "accessKeyId": "3bdecf4afebd41849628389a20629ecc", "secretAccessKey": "3f901ef12d454b9c92ba2dde7c029140", "sessionToken": "ZGZiM2M3MmU4Mjk4NGQ2MGEzYTNhYTAyMDE3NTZmZmV8AAAAAC8CAABf0XcbS9E/leusHxRyZ4DYNb+SH374S+mmkxaOpcwdLPC7JL/aTF5F7x83dQn354VKiTyNGuvQIsv7MidIPN7+0oOehdFlHua4RkwqIi8wOslX0qNitZa56WpxowLprrMksOHiQiEqYEzAyaVF3Oy3hBbMiX/RprtcnxERAi1/skNR1VzTZyYfS5D4p8Ul62X9Whwmj5Lkxy6yuZ1og94wytwTc8aWPFPGFIpQyCpCaxYvl/QkA1M0rxQ6SMaHbxTyEYuG2Eg8EOP0EKn2O2DMjGuLURRKuxHRCrFidRxDqOX9kM/L7gQXuaZl9DdB1DwZPrSo8xiPDRrfkpIqvkJEeB0blb8dXtMm0V0lmTznUrnPuoD4nfVyEPKCET+0JhQooxNLWDE6x4alnR8QtJkJ2yjrYaoMZdeuqKRcpgehVOIgI8ZDIumN1rdObs7a4Hw4Gmx7f0gQgLWdIF4ZOKsSpWP8aos+vzdOA+NNSHsTVg==", "createTime": "2015-11-18T11:48:17Z", "expiration": "2015-11-18T23:48:17Z", "userId": "2d6f4473c99e4ca7be1ca19ec18beacf" }
使用STS凭证访问TableStorage服务
与普通的API接口相比,使用STS凭证调用API时,只需要在请求头部增加x-bce-security-token:
PUT /v{version}/instance/{instanceName}/table/{tableName}/row/{rawurlencode(rowkey)} HTTP/1.1
Host: bts.bd.baidubce.com
Date: Wed, 27 Mar 2019 06:34:40 GMT
Authorization: <Authorization_String>
x-bce-security-token: <SessionToken>
Content-Type: text/plain
Content-Length: 11434