如果我们使用oss存储数据,那么不可避免的需要了解oss存储服务的安全验证方面的东西,其中在初始化oss的时候提供了两种方式的验证:STS鉴权模式  和 自签名模式,本人使用的是  自签名模式 但是在调试过程中着实坑了很久,现将注意事项总结如下帮助需要的人:

使用自签名模式,在初始化oss的时候需要传入OSSCustomSignerCredentialProvider这个类,以android端的代码为例

这个类具体实现示例如下:

OSSCredentialProvider credentialProvider = new OSSCustomSignerCredentialProvider() {@Overridepublic String signContent(String s) {OkHttpClient okHttpClient = new OkHttpClient();String url = null;try {url = ApiStores.API_SERVER_URL + "/aliyun/oss/getPolicy?s=" + URLEncoder.encode(s, "UTF-8");} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}Request request = new Request.Builder().url(url).build();Call call = okHttpClient.newCall(request);Response response = null;try {response = call.execute();String string = response.body().string();OssTokenModel token = new Gson().fromJson(string, OssTokenModel.class);return "OSS " + accessKeyId + ":" + token.getSignedString();} catch (Exception e) {e.printStackTrace();}return null;}
};

注意以上代码的:

1,signContent(String s)方法,该方法是在子线程中执行的,那么我们只需在这个线程中调用同步网络请求即可,注意是同步网络请求,该方法是oss异步调用的不会阻塞主线程

2,signContent(String s)方法是oss上传文件时异步回调的方法,方法的参数s已经是完全拼接好的字符串,里面已经包含了所需的全部字段(比如请求类型,文件类型,文件资源路径等),同时,其中也包含了必须的换行符,这一点需要非常注意,因为在与应用server交互的时候有可能会在传输过程中导致换行符丢失,所以我们需要将该字符串s进行转码:URLEncoder.encode(s, "UTF-8");

3,通过应用server得到的签名之后的字符串需要进行拼接"OSS " + accessKeyId + ":" + token.getSignedString();

注意"OSS "这个串右边包含了一个空格符号很容易忽略

4,如第2条所讲,signContent(String s)的参数s已经被oss拼接完成,我们只需要将其转码之后传到后台进行签名即可,后台签名需要先解码,代码如下

@ResponseBody
@RequestMapping("/getPolicy")
public Message getPolicy(@RequestParam String s) throws Exception {String tosign = URLDecoder.decode(s, "UTF-8");String signed = ServiceSignature.create().computeSignature(AccessKeySecret, tosign);Message message = new Message(Message.SUCCESS, signed, "处理成功");return message;
}

其中参数s即为前段传递过来的需要前面的字符串,先将其通过URLDecoder.decode(s, "UTF-8");解码,然后通过ServiceSignature.create().computeSignature(AccessKeySecret, tosign);签名即可

ServiceSignature这个类来自于如下依赖,pom文件中添加如下依赖即可

<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>2.8.1</version>
</dependency>

关于oss自签名总是验证通不过的总结相关推荐

  1. iOS使用Security.framework进行RSA 加密解密签名和验证签名

    iOS 上 Security.framework为我们提供了安全方面相关的api: Security框架提供的RSA在iOS上使用的一些小结 支持的RSA keySize 大小有:512,768,10 ...

  2. (0078)iOS开发之支付宝集成:客户端签名与验证

    请各位在看此教程之前请确保你的工程已经集成官方SDK成功,并且没有报错.本教程主要解决签名和验证的问题. 首先说一下简单支付流程: 你提交等待支付的订单信息给支付宝,支付宝返回订单支付结果给你(这里暂 ...

  3. Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)

    转载. 1.此文章主要介绍内容 本文主要介绍如何利用Nginx lua 实现将阿里云OSS存储空间做到同本地磁盘一样使用.核心是利用Nginx lua 对OSS请求进行签名并利用内部跳转将所有访问本地 ...

  4. 波卡链Substrate (7)Babe协议四“出块签名和验证”

    1. 步骤 step1. slot leader更新本地链C使用新块,并发送新块B发送给其他节点 step2. 签名 slk:当前槽 H(l-1):sLk前一个区块的哈希 d:VRF输出 pi:val ...

  5. Aliyun OSS Nginx proxy module(阿里云OSS Nginx 签名代理模块)

    1.此文章主要介绍内容 本文主要介绍怎样利用Nginx lua 实现将阿里云OSS存储空间做到同本地磁盘一样使用.核心是利用Nginx lua 对OSS请求进行签名并利用内部跳转将全部訪问本地Ngin ...

  6. 验证通扫描仪安装使用方法

    安装验证通扫描仪 一. 安装"PCI转COM转接卡"驱动程序. 1. 请将硬件"PCI转COM转接卡"卡插到电脑上,开机. 2. 安装硬件驱动程序. 二.安装扫 ...

  7. golang 使用RSA生成公私钥,加密,解密,并使用SHA256进行签名,验证

    话不多说直接上代码: package mainimport ("crypto""crypto/rand""crypto/rsa"" ...

  8. C#实现.Net对邮件进行DKIM签名和验证,支持附件,发送邮件签名后直接投递到对方服务器(无需己方邮件服务器)

    项目地址 https://github.com/xiangyuecn/DKIM-Smtp-csharp 主要支持 对邮件进行DKIM签名,支持带附件 对整个邮件内容(.eml文件)的DKIM签名进行验 ...

  9. 编写ATL工程实现ActiveX控件调用cryptoAPI接口(一)------------签名与验证

    注:下面的代码中用了Map,Base64,log,Result等都为自定义类型,太长就不一一贴出. [cpp]  view plain  copy  print ? /* * * * 文件名称:Sig ...

最新文章

  1. saltstack pkg模块用法
  2. php mysql 遍历 嵌套_PHP / mySQL – 如何将嵌套行提取到multidimensinal数组中
  3. A Famous Music Composer
  4. 【虚拟化】docker安装ElasticSearch+Kibana,下载IK分词器
  5. access 查找工龄大于30_ACCESS查询操作题完整
  6. Android魔法(第四弹)—— 一步步实现百叶窗效果
  7. 最优化:**回归/拟合方法总结
  8. 未定义标识符 stringc/c++(20)_到 2024 年,阿斯顿·马丁汽车销量的 20%以上将是电动汽车...
  9. Spring boot 出现的时间
  10. Digital root(数根)
  11. 小瓦怕扫地机器人_小瓦扫地机器人青春版评测:便宜有好货
  12. 关于string中的如果使用变量的笔记
  13. 成人高考专升本- 你需要知道的事情!!
  14. 教程:使用Java以编程方式将PLT转换为PDF或图像
  15. laravel项目启动
  16. hive数据库无主键进行去重SQL
  17. 咬肌边上有个滑动疙瘩_腮帮子有个滑动的疙瘩是怎么回事
  18. TML5期末大作业:我的家乡网站设计——我的家乡大连 带登录注册表单 轮播
  19. 传感器系列之4.7地磁传感器
  20. php mysql 课件_php课件

热门文章

  1. docker简介和安装(阿里云加速)以及Springboot项目部署docker,实现局域网下同时访问项目(详细过程)
  2. Mysql自连接查询
  3. 苹果微信的分身双开安装和微信其他隐藏功能你知道吗?
  4. 视频教程-Tableau从入门到大伽视频教程-大数据
  5. 目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)
  6. 使用electron 将网页打包成应用程序
  7. 【日常】edge和chrome浏览器截屏工具快捷键
  8. Mac电脑配置node环境变量
  9. codeblocks中用第三方库
  10. MUI+H5开发移动APP/网易邮箱大师项目实战/Android、IOS跨平台应用开发-王翠英-专题视频课程...