使用STS临时访问凭证访问OSS
假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。
阿里云OSS官网文档地址:使用STS临时访问凭证访问OSS - 对象存储 OSS - 阿里云
目录
一、DEMO项目文件截图
二、DEMO项目代码片段
三、 访问接口运行结果
- App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。
- App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。
- STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。
- App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。
- App客户端使用本地缓存的临时访问凭证去请求OSS API。OSS收到访问请求后,会通过STS服务来验证访问凭证,正确响应用户请求。
一、DEMO项目文件截图
二、DEMO项目代码片段
application.properties
#阿里云访问控制RAM子账户信息,需要登录阿里云控制台查看(Secret只在创建时可查看,需要做好备份)
aliyun.oss.accessKeyId=LTAI5tRzx6VDpPA28wG6XHpb
aliyun.oss.accessKeySecret=KqfbKGA48OiU8vrs6Ruwe9HzcLMbHq
#角色ID,在角色中进行授权,获取相应的权限
aliyun.sts.roleArn=acs:ram::1481594054055183:role/ramosstest
#指临时凭证的名称,一般来说建议使用不同的应用程序用户来区分。自定义(可不设置)
aliyun.sts.roleSessionName=RamOssTest
pom.xml
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--添加aliyun-java-sdk的相关依赖 start--><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-sts</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.5.0</version></dependency><!--添加aliyun-java-sdk的相关依赖 end-->
StsTokenVO.java
package com.csdn.vo;import lombok.Data;import java.io.Serializable;/*** 获取Token返回结果*/
@Data
public class StsTokenVO implements Serializable {/*** 访问密钥标识*/private String accessKeyId;/*** 访问密钥*/private String accessKeySecret;/*** 安全令牌*/private String securityToken;
}
StsTokenService.java
package com.csdn.service;import com.csdn.vo.StsTokenVO;public interface StsTokenService {/*** 获取STS token接口** @return StsTokenVO*/StsTokenVO getStsToken();
}
StsTokenServiceImpl.java
package com.csdn.service;import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
import com.aliyuncs.sts.model.v20150401.AssumeRoleRequest;
import com.aliyuncs.sts.model.v20150401.AssumeRoleResponse;
import com.csdn.vo.StsTokenVO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;@Service
public class StsTokenServiceImpl implements StsTokenService {private static final Logger LOGGER = LoggerFactory.getLogger(StsTokenServiceImpl.class);@Value("${aliyun.oss.accessKeyId}")private String accessKeyId;@Value("${aliyun.oss.accessKeySecret}")private String accessKeySecret;@Value("${aliyun.sts.roleArn}")private String roleArn;@Value("${aliyun.sts.roleSessionName}")private String roleSessionName;/*** token失效时间,单位秒(不设置默认60封装,这里设置5分钟)*/private static final Long durationSeconds = 300L;private static final String ENDPOINT = "sts.aliyuncs.com";/*** 获取STStoken接口** @param:* @return: StsTokenVO*/@Overridepublic StsTokenVO getStsToken() {StsTokenVO tokenVO = new StsTokenVO();try {// 添加endpoint(直接使用STS endpoint,前两个参数留空,无需添加region ID)DefaultProfile.addEndpoint("", "", "Sts", ENDPOINT);// 构造default profile(参数留空,无需添加region ID)IClientProfile profile = DefaultProfile.getProfile("", accessKeyId, accessKeySecret);// 用profile构造clientDefaultAcsClient client = new DefaultAcsClient(profile);final AssumeRoleRequest request = new AssumeRoleRequest()request.setMethod(MethodType.POST);request.setRoleArn(roleArn);request.setRoleSessionName(roleSessionName);// request.setDurationSeconds(durationSeconds);// 针对该临时权限可以根据该属性赋予规则,格式为json,没有特殊要求,默认为空// request.setPolicy(policy); // Optionalfinal AssumeRoleResponse response = client.getAcsResponse(request);AssumeRoleResponse.Credentials credentials = response.getCredentials();tokenVO.setAccessKeyId(credentials.getAccessKeyId());tokenVO.setAccessKeySecret(credentials.getAccessKeySecret());tokenVO.setSecurityToken(credentials.getSecurityToken());return tokenVO;} catch (ClientException e) {LOGGER.error("获取阿里云STS临时授权权限失败,错误信息:" + e);return null;}}
}
StsTokenController.java
package com.csdn.controller;import com.csdn.service.StsTokenService;
import com.csdn.vo.StsTokenVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("/api")
public class StsTokenController {@Autowiredprivate StsTokenService stsTokenService;@GetMapping("/oss/token")public StsTokenVO getToken() {return stsTokenService.getStsToken();}}
三、 访问接口运行结果
使用STS临时访问凭证访问OSS相关推荐
- 阿里云OSS获取STS临时访问凭证
参考阿里云官网地址:使用STS临时访问凭证访问OSS 细节记录 RAM Policy Editor生成授权策略 策略生成器工具:RAM Policy Editor STS接入地址 sts.开头 Str ...
- 使用前端JS上传文件到阿里云的OSS服务器,PHP生成STS临时访问凭证
官方教程地址:https://help.aliyun.com/document_detail/383950.html?spm=a2c4g.383952.0.0 这篇文章主要是指出官方教程没有说明的地方 ...
- 阿里云STS临时令牌操作OSS云存储
阿里云STS临时令牌操作OSS云存储 参考:官方文档1官方文档2 STS获取临时令牌操作OSS云存储 项目集成了swagger2自动接口文档,如未集成,需要将@Api.@ApiOperation等注解 ...
- 阿里云OSS开启Sts临时访问控制
阿里云OSS开启Sts临时访问控制 第一步.信息整理汇总 下面是整个过程中需要记录的数据,以及位置 其中AccessKey需要创建成功后,及时的记录,因为后续只会展示一个AccessKeyId,另外一 ...
- Ansible Tower 入门 1 - 配置主机清单和访问凭证
Ansible Tower 入门 1 - 配置主机清单和访问凭证 Ansible Tower 入门 2 - 通过模板运行 Git 上的 Playbook 和 Role Ansible Tower 入门 ...
- access_token(接口访问凭证)
微信公众平台为开发者提供了一系列接口,开发者通过调用这些接口能够实现自定义菜单管理.用户管理.消息群发.语义理解等功能,在调用这些接口时都需要传入接口访问凭证access_token.公众平台提供了专 ...
- 使用Cloudberry Explorer管理和访问阿里云OSS
摘要 对于从Amazon S3迁移到OSS用户,往往希望最小化客户端应用和工具改动,以达到尽可能平滑的迁移,减少迁移成本.本文以S3常用客户端工具Cloudberry Explorer for Ama ...
- 利用STS临时密钥服务快速搭建直传页面的实践
作者简介 吴硕卫:腾讯云技术支持工程师,现负责腾讯云存储产品的技术支持专项工作. 为了实现权限分离,提供更细颗粒度的权限控制,有效的控制帐号生效周期,本文通过腾讯云 CAM 产品的 STS(临时访问凭 ...
- 银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060、8088不能访问,访问提示404
问题现象:银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060.8088不能访问,访问tongweb应用端口 http://192.168.0.49:9060/console以及 ...
最新文章
- 第三天-零基础学习python
- Microsoft SQL Server 2008 express试用心得
- Centos安装图形化界面
- 统一账号/统一认证系统的引入和搭建(LDAP)
- oracle日期数据格式,oracle日期数据格式
- word List 30
- docker配置 注册中心
- 2020 美国大选在即,又到了 AI 花式打击假新闻的季节
- Matrix使用的分析
- 第一章数据分析与挖掘概述
- 演说之禅:幻灯片的演说是多多益善吗?
- coco 数据集下载
- 测试苹果授权登录Sign in with apple时,提示“未完成注册”处理经验分享
- DA转换器原理及应用(报告)
- 连接无线上网服务器能查到吗,网络管理历史-怎样才能不让服务器查到自己上网记录我们单位 – 手机爱问...
- 阿里云大数据——搭建企业级数据分析平台
- 金刚菩提子开裂自动修复此计算机,金刚菩提子开裂怎么办 金刚菩提子为什么会开裂...
- 读书笔记——吴翰清《白帽子讲Web安全》
- [重要]招募计划 - 积微速成报名结果
- 信息系统项目管理-立项管理
热门文章
- OpenCV---ROI(region of interest)和泛洪填充
- loadrunner性能测试——第一步 录制脚本(中文版)
- HDU 5752.Sqrt Bo
- Excel导入导出帮助类
- document.execCommand() 解析
- idea没有错误提示的解决方法(一直处于错误分析中)
- 【实践】阿里妈妈流量反作弊算法实践
- 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
- pytorch的torch.cuda.is_available()输出false
- (Object detection)目标检测从入门到精通——第一部分