假设您是一个移动App开发者,希望使用阿里云OSS服务来保存App的终端用户数据,并且要保证每个App用户之间的数据隔离。此时,您可以使用STS授权用户直接访问OSS。

阿里云OSS官网文档地址:使用STS临时访问凭证访问OSS - 对象存储 OSS - 阿里云

目录

一、DEMO项目文件截图

二、DEMO项目代码片段

三、 访问接口运行结果

  1. App用户登录。App用户和云账号无关,它是App的终端用户,App服务器支持App用户登录。对于每个有效的App用户来说,需要App服务器能定义出每个App用户的最小访问权限。
  2. App服务器请求STS服务获取一个安全令牌(SecurityToken)。在调用STS之前,App服务器需要确定App用户的最小访问权限(用RAM Policy来自定义授权策略)以及凭证的过期时间。然后通过扮演角色(AssumeRole)来获取一个代表角色身份的安全令牌(SecurityToken)。
  3. STS返回给App服务器一个临时访问凭证,包括一个安全令牌(SecurityToken)、临时访问密钥(AccessKeyId和AccessKeySecret)以及过期时间。
  4. App服务器将临时访问凭证返回给App客户端,App客户端可以缓存这个凭证。当凭证失效时,App客户端需要向App服务器申请新的临时访问凭证。例如,临时访问凭证有效期为1小时,那么App客户端可以每30分钟向App服务器请求更新临时访问凭证。
  5. 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相关推荐

  1. 阿里云OSS获取STS临时访问凭证

    参考阿里云官网地址:使用STS临时访问凭证访问OSS 细节记录 RAM Policy Editor生成授权策略 策略生成器工具:RAM Policy Editor STS接入地址 sts.开头 Str ...

  2. 使用前端JS上传文件到阿里云的OSS服务器,PHP生成STS临时访问凭证

    官方教程地址:https://help.aliyun.com/document_detail/383950.html?spm=a2c4g.383952.0.0 这篇文章主要是指出官方教程没有说明的地方 ...

  3. 阿里云STS临时令牌操作OSS云存储

    阿里云STS临时令牌操作OSS云存储 参考:官方文档1官方文档2 STS获取临时令牌操作OSS云存储 项目集成了swagger2自动接口文档,如未集成,需要将@Api.@ApiOperation等注解 ...

  4. 阿里云OSS开启Sts临时访问控制

    阿里云OSS开启Sts临时访问控制 第一步.信息整理汇总 下面是整个过程中需要记录的数据,以及位置 其中AccessKey需要创建成功后,及时的记录,因为后续只会展示一个AccessKeyId,另外一 ...

  5. Ansible Tower 入门 1 - 配置主机清单和访问凭证

    Ansible Tower 入门 1 - 配置主机清单和访问凭证 Ansible Tower 入门 2 - 通过模板运行 Git 上的 Playbook 和 Role Ansible Tower 入门 ...

  6. access_token(接口访问凭证)

    微信公众平台为开发者提供了一系列接口,开发者通过调用这些接口能够实现自定义菜单管理.用户管理.消息群发.语义理解等功能,在调用这些接口时都需要传入接口访问凭证access_token.公众平台提供了专 ...

  7. 使用Cloudberry Explorer管理和访问阿里云OSS

    摘要 对于从Amazon S3迁移到OSS用户,往往希望最小化客户端应用和工具改动,以达到尽可能平滑的迁移,减少迁移成本.本文以S3常用客户端工具Cloudberry Explorer for Ama ...

  8. 利用STS临时密钥服务快速搭建直传页面的实践

    作者简介 吴硕卫:腾讯云技术支持工程师,现负责腾讯云存储产品的技术支持专项工作. 为了实现权限分离,提供更细颗粒度的权限控制,有效的控制帐号生效周期,本文通过腾讯云 CAM 产品的 STS(临时访问凭 ...

  9. 银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060、8088不能访问,访问提示404

    问题现象:​银河麒麟服务器系统ip可ping通,但是tongweb的默认端口9060.8088不能访问,访问tongweb应用端口 http://192.168.0.49:9060/console以及 ...

最新文章

  1. 第三天-零基础学习python
  2. Microsoft SQL Server 2008 express试用心得
  3. Centos安装图形化界面
  4. 统一账号/统一认证系统的引入和搭建(LDAP)
  5. oracle日期数据格式,oracle日期数据格式
  6. word List 30
  7. docker配置 注册中心
  8. 2020 美国大选在即,又到了 AI 花式打击假新闻的季节
  9. Matrix使用的分析
  10. 第一章数据分析与挖掘概述
  11. 演说之禅:幻灯片的演说是多多益善吗?
  12. coco 数据集下载
  13. 测试苹果授权登录Sign in with apple时,提示“未完成注册”处理经验分享
  14. DA转换器原理及应用(报告)
  15. 连接无线上网服务器能查到吗,网络管理历史-怎样才能不让服务器查到自己上网记录我们单位 – 手机爱问...
  16. 阿里云大数据——搭建企业级数据分析平台
  17. 金刚菩提子开裂自动修复此计算机,金刚菩提子开裂怎么办 金刚菩提子为什么会开裂...
  18. 读书笔记——吴翰清《白帽子讲Web安全》
  19. [重要]招募计划 - 积微速成报名结果
  20. 信息系统项目管理-立项管理

热门文章

  1. OpenCV---ROI(region of interest)和泛洪填充
  2. loadrunner性能测试——第一步 录制脚本(中文版)
  3. HDU 5752.Sqrt Bo
  4. Excel导入导出帮助类
  5. document.execCommand() 解析
  6. idea没有错误提示的解决方法(一直处于错误分析中)
  7. 【实践】阿里妈妈流量反作弊算法实践
  8. 【报告分享】2020中国企业直播应用场景趋势研究报告.pdf(附下载链接)
  9. pytorch的torch.cuda.is_available()输出false
  10. (Object detection)目标检测从入门到精通——第一部分