获取阿里云oss的token

前端获取后端数据:

getOssToken () {
  this.$http({
    url: this.$http.adornUrl('/ossUser/temp'),   //后端的接口
    method: 'get'
  }).then(({data}) => {
    if (data && data.code === 200) {
      this.ossConfig.accessKeyId = data.body.accessKeyId
      this.ossConfig.accessKeySecret = data.body.accessKeySecret
      this.ossConfig.stsToken = data.body.securityToken
      console.log('返回的数据为')
      console.log(data)
    } else {
      this.$message.error('服务端账号失效')
    }
  })
  
  
  // data里的参数
ossConfig: {
  region: 'oss-cn-shanghai',
  accessKeyId: null,
  accessKeySecret: null,
  stsToken: null,
  bucket: 'coach-1'
},


结果:
{msg: '操作成功', code: 200, body: {}} 下面为打开:
body: {accessKeyId: xxxx', accessKeySecret: 'xxxxx7sBt7xZJKEx9mXHmoQ7UwdZs5', securityToken: 'xxxxxxTQbONhoha…MDbAeRsp8Q9w3TwFhgvksEzOyBNwwRmnmy/j6/RD9onDsrPM='}
code: 200
msg: "操作成功"
[[Prototype]]: Object

后端获取token

@GetMapping("/temp")
@ApiOperation("临时用户")
public BaseR<?> getTempUser() {
    // 自定义角色会话名称,用来区分不同的令牌,例如可填写为SessionTest。
    String roleSessionName = "manageSession";
    String key = RedisKeys.getOssConfigKey(roleSessionName);
    OssUserVo ossUserVo = redisUtils.get(key, OssUserVo.class);
    if (! Objects.equals(ossUserVo,null)) {
        return BaseR.ok(ossUserVo);
    }
    // STS接入地址,例如sts.cn-hangzhou.aliyuncs.com。
    String endpoint = "sts.cn-shanghai.aliyuncs.com";
    // 填写步骤1生成的访问密钥AccessKey ID和AccessKey Secret。
    String AccessKeyId = projectConfig.getAccessKeyId();
    String accessKeySecret = projectConfig.getAccessKeySecret();
    // 填写步骤3获取的角色ARN。
    String roleArn = projectConfig.getArn();
    // 以下Policy用于限制仅允许使用临时访问凭证向目标存储空间examplebucket上传文件。
    // 临时访问凭证最后获得的权限是步骤4设置的角色权限和该Policy设置权限的交集,即仅允许将文件上传至目标存储空间examplebucket下的exampledir目录。
    String policy = "{\n" +
            "    \"Version\": \"1\", \n" +
            "    \"Statement\": [\n" +
            "        {\n" +
            "            \"Action\": [\n" +
            "                \"oss:PutObject\"\n" +
            "            ], \n" +
            "            \"Resource\": [\n" +
            "                \"acs:oss:*:*:coach-1/*\" \n" +
            "            ], \n" +
            "            \"Effect\": \"Allow\"\n" +
            "        }\n" +
            "    ]\n" +
            "}";
    OssUserVo ossUser = new OssUserVo();
    try {
        // 添加endpoint。
        DefaultProfile.addEndpoint("", "", "Sts", endpoint);
        // 构造default profile。
        IClientProfile profile = DefaultProfile.getProfile("", AccessKeyId, accessKeySecret);
        // 构造client。
        DefaultAcsClient client = new DefaultAcsClient(profile);
        final AssumeRoleRequest request = new AssumeRoleRequest();
        request.setMethod(MethodType.POST);
        request.setRoleArn(roleArn);
        request.setRoleSessionName(roleSessionName);
        // 如果policy为空,则用户将获得该角色下所有权限。
        request.setPolicy(policy);
        // 设置临时访问凭证的有效时间为3600秒。
        request.setDurationSeconds(3600L);
        final AssumeRoleResponse response = client.getAcsResponse(request);
        ossUser.setAccessKeyId(response.getCredentials().getAccessKeyId())
            .setAccessKeySecret(response.getCredentials().getAccessKeySecret())
            .setSecurityToken(response.getCredentials().getSecurityToken());
    }catch (ClientException e) {
        log.error("获取oss临时秘钥失败:{}",e);
        return BaseR.error("获取oss临时秘钥失败: "+e.getMessage());
    }
    redisUtils.set(key,ossUser,3600);
    return BaseR.ok(ossUser);
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值