• 关于

    HTTPS是如何保证安全的?

    的搜索结果

问题

ECS故障处理百问合集

yq传送门 2019-12-01 19:35:27 15348 浏览量 回答数 11

问题

安全技术百问,老板再也不用担心病毒勒索了!

yq传送门 2019-12-01 20:11:52 24648 浏览量 回答数 15

问题

搞清楚这些,你就是域名高手——域名百问大合集

yq传送门 2019-12-01 19:38:17 24482 浏览量 回答数 41

问题

域名相关

麒麟论坛 2019-12-01 19:38:53 2165 浏览量 回答数 3

问题

JAVA web 【精品问答合集】

马铭芳 2019-12-01 20:09:25 24739 浏览量 回答数 3

问题

使用react vue angular开发的单页应用在使用ajax进行登录传输数据时候,密码的安全性如何保证?

蛮大人123 2019-12-01 20:15:16 1221 浏览量 回答数 1

问题

大数据时代——数据存储技术百问

yq传送门 2019-12-01 20:27:42 31965 浏览量 回答数 35

问题

云服务器ECS【问答合集】

马铭芳 2019-12-01 20:19:32 19825 浏览量 回答数 6

问题

【精品问答】前端面试手册之网络编程篇

前端问答 2019-12-01 22:04:47 63 浏览量 回答数 1

回答

域名实名认证:根据域名注册局的要求,需要提交域名持有者的资料(公司请提交有效的企业营业执照或组织机构代码证扫描件;个人请提交身份证正面扫描件);资料请通过 域名控制台 提交,提交后您的资料将由第三方审核机构进行审核,3-5 个工作日内即可审核通过。备案:根据工信部《互联网信息服务管理办法》(国务院 292 号令),网站在未完成备案之前,不能指向大陆境内服务器开通访问。备案是针对网站的备案。账号实名认证:根据阿里云网站服务条款,一个阿里云账户仅能对应唯一的法律主体。为保证账户和交易安全,需对阿里云账号完成实名认证,认证通过后才能消费。分个人认证及企业认证两种:企业认证方法,请参见 如何完成企业实名认证。https://help.aliyun.com/knowledge_detail/37172.html?spm=5176.7741880.2.26.KT5v1F个人认证方法,请参见 个人如何完成实名认证。https://help.aliyun.com/knowledge_detail/48263.html?spm=5176.7741880.2.27.KT5v1F

大财主 2019-12-02 00:39:15 0 浏览量 回答数 0

问题

【Java学习全家桶】1460道Java热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:15 27612 浏览量 回答数 19

问题

【精品回答】移动推送

montos 2020-04-09 09:57:11 14 浏览量 回答数 1

问题

【精品问答】python技术1000问(1)

问问小秘 2019-12-01 21:57:48 456417 浏览量 回答数 22

问题

云服务器ECS【问答合集】

游客886 2019-12-01 21:30:13 1901 浏览量 回答数 2

问题

荆门开诊断证明-scc

游客5k2abgdj3m2ti 2019-12-01 22:09:00 1 浏览量 回答数 0

问题

【精品问答】Java技术1000问(1)

问问小秘 2019-12-01 21:57:43 39926 浏览量 回答数 17

问题

[精品问答]Java一百问第一期

问问小秘 2019-12-01 21:51:20 791 浏览量 回答数 1

问题

Java技术1000问(3)【精品问答】

问问小秘 2020-06-02 14:27:10 11463 浏览量 回答数 3

问题

CDN 如何实现视音频点播加速?

青衫无名 2019-12-01 22:01:35 1639 浏览量 回答数 0

回答

对SCDN服务接口的调用是通过向SCDN服务端发送HTTP请求(可以通过HTTP或HTTPS通道发送),并获取SCDN服务对该请求响应结果的过程。SCDN服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交或完成相应操作,并把处理的结果以HTTP响应地形式返回给调用者。 请求组成 请求由以下几个部分组成: HTTP方法——目前scdn服务的所有接口只支持GET方法的调用。 请求URL——请求的服务地址、要执行的操作名称、操作参数和公共请求参数都包含在请求的URL中。 服务端地址:scdn服务的域名是http://scdn.aliyuncs.com/和https://scdn.aliyuncs.com/。为了保证请求的安全性,强烈推荐您使用HTTPS通道。 (HTTPS加入了SSL层对通信进行了加密,可以防止通信被截获而导致敏感信息泄露。) 操作名称:每个接口都需要指定要执行的操作名称,即Action参数。 操作参数:根据要执行的操作不同,需要传入不同的操作参数,详见每个接口的说明。 公共请求参数:包含时间戳、签名信息等每个请求都要包含的参数。 为了使服务端能够正确地验证用户的身份并授权请求执行,请求在提交前要进行签名处理。签名的规则参见签名机制一节。 在服务端对请求处理完成后,会返回响应结果。响应结果分为成功结果和错误消息,格式描述参见JSON返回示例: { "RequestId": "4C467B38-3910-447D-87BC-AC049166F216", /* 返回结果数据 */ } 返回结果一节。客户端可以解析响应的消息体,得到执行结果。 调用示例 以DescribeScdnService接口为例: 对应的Action是DescribeScdnService。在添加了所有公共请求参数(除Signature)后,请求的URL是(为了便于阅读,这里是进行URL编码前的URL): http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10:33:56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2013-01-10&SignatureVersion=1.0 按照签名计算规则,先构造出规范化请求字符串(Canonicalized Query String),如下: http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10:33:56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2013-01-10&SignatureVersion=1.0 再构造出用于签名的字符串StringToSign值为: GET&%2F&AccessKeyId%3Dtestid%26Action% DescribeScdnService %26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3DNwDAxvLU6tFE0DVb%26SignatureVersion%3D1.0%26TimeStamp%3D2012-12-26T10%253A33%253A56Z%26Version%3D2013-01-10 以下Java示例代码演示了如何添加公共请求参数、如何构造用请求参数构造规范化请求字符串,以及如何构造StringToSign字符串。示例假定所有请求参数放在一个Map <String, String>对象里,使用的Access Key ID是“testid”。 final String HTTP_METHOD = "GET"; …………………………………… 其中需要注意的是,TimeStamp参数要求符合ISO8601规范,并注意使用UTC时间,否则会遇到错误。下面的示例代码演示了如何生成符合规范的TimeStamp字符串: private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 生成规范化请求字符串(示例中的canonicalizedQueryString变量),以及stringToSign时,都需要进行必要的编码。编码的规则在签名机制一节中有详细描述。下面的示例代码演示了如何用java.net.URLEncoder类完成编码: private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException{ return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20") .replace("*", "%2A").replace("%7E", "~") : null; } 假定使用的Access Key Id是“testid”,Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,最终计算得到的签名值为: SDFQNvyH5rtkc9T5Fwo8DOjw5hc= 计算签名的示例代码(Java): // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec( key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal( stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,请按照RFC3986规则进行URL编码后得到的 http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2012-09-13&SignatureVersion=1.0&Signature=SDFQNvyH5rtkc9T5Fwo8DOjw5hc%3d 接下来,通过HTTP请求的方式向上面的URL地址发送HTTP请求,并得到SCDN服务端的响应结果(示例): none 通过解析这个XML结果即可以得到所有可用的地域Id和LocalName的列表。如果在提交请求时,指定Format参数为JSON,那么返回结果的格式为JSON格式

保持可爱mmm 2020-03-29 16:00:23 0 浏览量 回答数 0

问题

点播和播放器下载需要的参数的区别

樰篱 2019-12-01 21:04:15 2751 浏览量 回答数 1

回答

优点kotlin提供了很多好的特性,比如:null安全检测,属性访问,unchecked exceptions, publication有更详细的介绍。 1.1 java 自动转换成kotlinkotlin项目开发总结有介绍如何使用,这个是有JetBrains提供的,目前已经集成到了IDEA/AS, 虽然它不是很完美(我的上篇博客也已经介绍到了),但是对比重新用Kotlin开发一个完全一样功能的类来说,可以节省不少时间。 1.2 lateinit Delegates.notNull and lazykotlin的null安全监测是个非常好的特性,但是也有有个问题,比如: var aMap: AMap? = null onCreate(){ aMap = ... aMap!!.projection .... }1234567虽然我们可以保证aMap已经在onCreate方法定义了,但是因为我们在定义aMap的时候是AMap?类型,所以在以后使用的都必须使用aMap!!来告诉编译器aMap不为null,会显得非常麻烦。幸运的是kotlin已经帮我们考虑到了应对方法 lateinit var name: Stringvar age: Int by Delegates.notNull()12通过上面两种方法,可以在定义的时候不提供初始化,可以延迟到需要的时候,但是就像我在kotlin项目开发总结说的,需要慎用,除非你能确保不会在后面遗漏掉重新赋值,否则会在运行时报空指针错误,这就浪费了kotlin的null安全监测这个非常好的特性。 lazy代理是个很好用的东西,就像下面这样的定义 val imm: InputMethodManager by lazy { getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager }123lazy后面跟着的block只会在你第一次read这个imm的时候调用,以后读取imm会直接返回block保存的值。在需要追求启动速度的APP可以很好的使用。 1.3 扩展后的collectionskotlin提供了很多对collections和iterables的扩展,具体可以看下 我写的分析和使用collections。 1.4 Named 和 默认的函数参数Named 函数参数和默认函数参数非常简单,但有时候可以帮我们省掉很多代码。特别是当构造函数有超过4个以上的参数时,可以指定默认几个默认参数,在调用的时候可以只提供一个参数。比如 class Presenter( val okhttp: OkHttp = productionOkHttp(), val picasso: Picasso = productionPicassoInstance() ) {...}1234在调用的时候,我们不提供参数,那么默认参数会被使用 var prensenter = Presenter()1 缺点虽然kotlin非常强大,但它毕竟不是完美的。它也会有一些可能未来会解决的缺点。 2.1 编译速度慢大家在使用kotlin开发项目的时候应该有注意到了,主要还是因为kotlin会自动自动生成更多的代码,比如为属性生成get/set, 对比java会存在更多的方法数量。https://youtrack.jetbrains.com/issue/KT-6246,这篇博客有做分析 2.2 annotation processing的问题我目前开发的项目使用了dagger,permissionsdispatcher,deeplinkdispatch,databinding,都需要使用kapt来做annotation proccessing,但是我已经碰到了好多次,kapt报的很奇怪的错误,有一次,我重构dagger的module时,报了一个蛋疼的问题,我以为我是dagger没用好,找了很多资料对比都没有解决,花了大概一天的时间,后面没办法只能clean project,但是奇怪的问题还在,后面我让application继承了DaggerApplication,clean下就可以。后面还是碰到好几次这样的问题,都是clean之后build就可以了,这个问题应该不只我一个人碰到,我想可能是kapt的一个bug, 我还是很相信google/JetBrains, 所以还是继续坚持使用kotlin开发项目。 2.3 没有命名空间kotlin允许定义top-level的函数和属性,比如 //demo.ktvar a = "aa"fun printlnA(){ println(a) }12345这可能是一个非常好的特性,但是也会有问题,比如在项目下面有两个甚至更多的printlnA方法,那么在调用的时候(特别是在阅读代码),很难区分方法来自哪个地方,除非你F3跳转到声明处。为了避免这个问题,你可以选择把printlnA方法移到一个object中,比如 object PrintlnHelper{ fun printlnA(){ println(a) } }12345让我们来看下kotlin和java的调用方式 //kotlinPrintlnHelper.printlnA()//javaPrintlnHelper.INSTANCE.printlnA()1234为了避免如上在Java中调用的怪怪的。。,可以使用@JvmStatic注解该方法 object PrintlnHelper{ @JvmStatic fun printlnA(){ println(a) } }123456通过上面的分析,对于有代码洁癖或者同时用Java和kotlin开发的项目,也是不够完美的,这个缺点是可以避免的,但是你需要花费一点时间去熟悉Kotlin 2.4 没有静态修饰语还是像上面的问题,如果项目同时存在kotlin和Java,而且Java需要调用kotlin代码,看代码分析问题 //Javapublic class View { public static final int VISIBLE = 0x00000000; public static final int INVISIBLE = 0x00000004; public static View inflate(Context context, int resource) {...} }123456使用kotlin使用同样的功能,如下: class View { companion object { @JvmField val VISIBLE: Int = 0x00000000 @JvmField val INVISIBLE: Int = 0x00000004 @JvmStatic fun inflate(context: Context, resource: Int) {...} } }12345678910下面是有@JvmField和没有的Java调用方式 // With annotations:View.VISIBLE;//Without annotations:View.Companion.getVISIBLE();1234其实这个问题也不是很严重的,但是对比Java还是多了个@JvmField, 但是kotlin新手或者容易忘记,使用@JvmField,这个缺点可以通过熟悉kotlin来避免 2.5 Java自动转换成kotlin带来的问题Java自动转换成kotlin是个非常好的特性,但是也会带来问题。Javadoc原来的结构会被破坏掉,静态field和方法会转换成companion object中的普通声明,如果有Java代码调用这个类,就会出现点问题,除非你后面手动给这个转换后的companion object 添加上@JvmField和@JvmStatic。这是个不小的隐患,需要特别注意下。 2.6 会增加方法数量过多的方法数量会导致编译速度变慢。kotlin通过闭包,内联函数等可以显著减少代码的总行数,但它可能也会增加编译后的方法数量。对于Android项目来说这肯定是一个不小的缺点。有很多原因会导致方法数量增加,但是最大的来源是kotlin实现属性。 kotlin不像Java可以直接访问field, 而是通过创建property的方式来访问。这是一个很好的特性,你可以自定义实现property的set/get,对比Java的set/get方法是个很大的进步。 但是这个是有代价的,对于val属性,kotlin自动生成backing field和getter函数来供java调用。public var属性会自动生成setter/getter函数。幸运的是private var属性已经有默认的setter/getter,需要不需要额外生成。所以这个时候你想想如果你定义了很多个public var和val属性,那么kotlin会帮你自动生成更多的函数,所以带来的后果就是方法数量会越来越多,导致编译速度变慢。 假如方法数量已经接近限制,不需要使用自定义setter的属性可以用@JvmField修饰,被@JvmField修饰的属性不会自动生成setter/getter函数,如下 @JvmFieldvar aMap: aMap? = null122.7 “==”在kotlin中,”==”和”equals”都是比较引用是否相等。如何项目中只有kotlin代码,那这个肯定是个非常好的特性,但是如果项目同时包含java和kotlin(比如:你是在旧的java工程基础上,用kotlin开发新功能),那么“==”很容易产生混淆和错乱。 设计原则3.1 kotlin的class默认是final, 如果想要能被继承,那么需要使用open 修饰,它的设计原则来自于 Effective Java 这种默认的设计原则,会导致第三方/未完成的sdk的大多数会是不可继承的,从提供者角度来说:它必须保证这个类是足够完整的,从使用者角度来说:这个类必须要提供我需要的所有东西,否则,我必须重写。当然提供者可以为这个类加上open来表示这个类是可以继承的,但是这是另外一种设计思维。 Roedy Green, How to Write Unmaintainable Code有提到: 给你的所有类设置为final。 毕竟,你完成了这个项目 - 当然没有人可以通过扩展你的class来改善你的工作。 这甚至可能是一个安全漏洞 - 毕竟,为什么不是java.lang.String final? 如果您的项目中的其他编程人员抱怨,请告诉他们您的执行速度提升 3.2 错误的使用运算符重载kotlin允许对类的变量运算符进行重载,设想有下面的代码 var person3 = person1 + person21 “+” 这个运算符有可能在很多个地方做了重载,在后期维护代码,很难区分哪个是哪个 作者:安卓机器人 来源:CSDN 原文:https://blog.csdn.net/ncuboy045wsq/article/details/74853107 版权声明:本文为博主原创文章,转载请附上博文链接!

auto_answer 2019-12-02 01:49:53 0 浏览量 回答数 0

回答

为了保证账户资金安全,阿里云账号必须完成实名认证才可以进行提现。温馨提醒:请务必使用与您相符的实名认证账号进行业务操作,如果您借用非同名的实名认证账号进行业务操作,后续可能存在因资金归属纠纷带来经济损失。一、账号性质如何判断客户阿里云账户资金款项只退回使用服务主体的银行或支付宝账号,使用服务主体基于合同主体来判断(目前将根据开票信息和账号实名认证主体信息为判断标准)。(一)如果用户已开过发票:发票主体信息和实名认证主体信息一致时,客户账号主体以实名认证的信息为准,提现到实名认证信息的同人银行或支付宝账号;发票主体信息和实名认证主体信息不一致,(1)阿里云账号是个人实名认证但发票主体信息为企业时,客户账号主体以发票主体信息为准,提现到企业发票信息的同人银行或支付宝账号;(2)阿里云账号是企业实名认证但发票信息为个人时,客户账号主体以实名认证信息为准,提现到企业实名认证信息的同人银行或支付宝账号。(二)如果用户未开过发票:客户账号主体以实名认证信息为准,提现到其阿里云账号实名认证信息的同人银行或支付宝账号。二、提现的具体规则如果客户的阿里云账号被判断为个人时,其账号内来源于信用卡的资金只能提现至与实名认证信息同名的银行信用卡,非信用卡来源的资金可提现至与实名认证信息同名的银行或支付宝账号。如果客户的阿里云账号被判断为企业时,其账号内资金可提现至与发票主体信息或企业实名认证信息一致的同名银行或支付宝账号。三、提现的特定限制如果客户的阿里云账号开通了按量付费业务,其账户需预留100元金额不能提现。如果客户的阿里云账号存在欠票时,不允许提现,需先退回发票。详情:https://help.aliyun.com/knowledge_detail/37095.html?spm=5176.7837094.2.1.abDAQq

51干警网 2019-12-01 23:36:25 0 浏览量 回答数 0

问题

Apache Flink常见问题汇总【精品问答】

黄一刀 2020-05-19 17:51:47 11230 浏览量 回答数 2

回答

一.背景 微服务架构下,我们的系统根据业务被拆分成了多个职责单一的微服务。 每个服务都有自己的一套API提供给别的服务调用,那么如何保证安全性呢? 不是说你想调用就可以调用,一定要有认证机制,是我们内部服务发出的请求,才可以调用我们的接口。 需要注意的是我们这边讲的是微服务之间调用的安全认证,不是统一的在API官网认证,需求不一样,API网关处的统一认证是和业务挂钩的,我们这边是为了防止接口被别人随便调用。 二.方案 OAUTH2 Spring Cloud可以使用OAUTH2来实现多个微服务的统一认证授权 通过向OAUTH2服务进行集中认证和授权,获得access_token 而这个token是受其他微服务信任的,在后续的访问中都把access_token带过去,从而实现了微服务的统一认证授权。 JWT JWT是一种安全标准。基本思路就是用户提供用户名和密码给认证服务器,服务器验证用户提交信息信息的合法性;如果验证成功,会产生并返回一个Token,用户可以使用这个token访问服务器上受保护的资源。 感觉这2种好像没多大区别呀,其实是有区别的:OAuth2是一种授权框架 ,JWT是一种认证协议 无论使用哪种方式切记用HTTPS来保证数据的安全性。 三.用哪种 我个人建议用JWT,轻量级,简单,适合分布式无状态的应用 用OAUTH2的话就麻烦点,各种角色,认证类型,客户端等等一大堆概念 四.怎么用 首先呢创建一个通用的认证服务,提供认证操作,认证成功后返回一个token @RestController@RequestMapping(value="/oauth")public class AuthController { @Autowired private AuthService authService; @PostMapping("/token") public ResponseData auth(@RequestBody AuthQuery query) throws Exception { if (StringUtils.isBlank(query.getAccessKey()) || StringUtils.isBlank(query.getSecretKey())) { return ResponseData.failByParam("accessKey and secretKey not null"); } User user = authService.auth(query); if (user == null) { return ResponseData.failByParam("认证失败"); } JWTUtils jwt = JWTUtils.getInstance(); return ResponseData.ok(jwt.getToken(user.getId().toString())); } @GetMapping("/token") public ResponseData oauth(AuthQuery query) throws Exception { if (StringUtils.isBlank(query.getAccessKey()) || StringUtils.isBlank(query.getSecretKey())) { return ResponseData.failByParam("accessKey and secretKey not null"); } User user = authService.auth(query); if (user == null) { return ResponseData.failByParam("认证失败"); } JWTUtils jwt = JWTUtils.getInstance(); return ResponseData.ok(jwt.getToken(user.getId().toString())); } } JWT可以加入依赖,然后写个工具类即可,建议写在全局的包中,所有的服务都要用,具体代码请参考:JWTUtils GITHUB地址:https://github.com/jwtk/jjwt JWT提供了很多加密的算法,我这边用的是RSA,目前是用的一套公钥以及私钥,这种做法目前来说是不好的,因为万一秘钥泄露了,那就谈不上安全了,所以后面会采用配置中心的方式来动态管理秘钥。 类里主要逻辑是生成token,然后提供一个检查token是否合法的方法,以及是否过期等等判断。 <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version> 统一认证的服务有了,我们只需要将认证服务注册到注册中心即可给别的服务消费。 那么我们如何使用刚刚的认证服务来做认证呢,最简单的办法就是用Filter来处理 比如说我现在有一个服务fangjia-fsh-house-service,之前是随便谁都能调用我提供的接口,现在我想加入验证,只有验证通过的才可以让它调用我的接口 那就在fangjia-fsh-house-service中加一个过滤器来判断是否有权限调用接口,我们从请求头中获取认证的token信息,不需要依赖Cookie 这个过滤器我也建议写在全局的项目中,因为也是所有服务都要用,代码请参考:HttpBasicAuthorizeFilter 主要逻辑就是获取token然后通过JWTUtils来验证是否合法,不合法给提示,合法则放过 这边需要注意的地方是解密的秘钥必须跟加密时是相同的,不然解密必然失败,就是bug了 //验证TOKENif (!StringUtils.hasText(auth)) { PrintWriter print = httpResponse.getWriter(); print.write(JsonUtils.toJson(ResponseData.fail("非法请求【缺少Authorization信息】", ResponseCode.NO_AUTH_CODE.getCode()))); return; }JWTUtils.JWTResult jwt = jwtUtils.checkToken(auth);if (!jwt.isStatus()) { PrintWriter print = httpResponse.getWriter(); print.write(JsonUtils.toJson(ResponseData.fail(jwt.getMsg(), jwt.getCode()))); return; }chain.doFilter(httpRequest, response); 到这步为止,只要调用方在认证通过之后,通过认证服务返回的token,然后塞到请求头Authorization中,就可以调用其他需要认证的服务了。 这样看起来貌似很完美,但是用起来不方便呀,每次调用前都需要去认证,然后塞请求头,如何做到通用呢,不需要具体的开发人员去关心,对使用者透明,下篇文章,我们继续探讨如何实现方便的调用。 具体代码可以参考我的github: https://github.com/yinjihuan/spring-cloud

小六码奴 2019-12-02 02:03:21 0 浏览量 回答数 0

回答

为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。 概述 RESTful API需要按如下格式在API请求头(request header)中添加Authorization参数进行签名: Authorization:acs:AccessKeyId:Singature 其中: acs:Alibaba Cloud Service的缩写,固定标识不可修改。 AccessKeyId:调用者调用API所用的密钥ID。 Signature:使用AccessKey Secret对请求进行对称加密的签名。 计算签名 签名算法遵循RFC 2104 HMAC-SHA1规范,使用AccessSecret对编码、排序后的整个请求串计算HMAC值作为签名。签名的元素是请求自身的一些参数,由于每个API请求内容不同,所以签名的结果也不尽相同。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of( StringToSign)) ) 完成以下操作,计算签名: 构建待签名字符串。 待签名字符串(StringToSign)是API请求拼装的字符串,用于计算签名,包括: HTTP协议Header 阿里云协议Header (CanonicalizedHeaders) 规范资源(CanonicalizedResource) Body 待签名字符串必须按照以下顺序构造: StringToSign = //http协议Header HTTP-Verb + "\n" + Accept + "\n" + Content-MD5 + "\n" +//Body的MD5值放在此处 Content-Type + "\n" + Date + "\n" + //阿里云协议header(CanonicalizedHeaders) CanonicalizedHeaders + //签名中如何包含CanonicalizedResource(规范资源) CanonicalizedResource 示例:原始请求 POST /stacks?name=test_alert&status=COMPLETE HTTP/1.1 Host: ***.aliyuncs.com Accept: application/json Content-MD5: ChDfdfwC+Tn874znq7Dw7Q== Content-Type: application/x-www-form-urlencoded;charset=utf-8 Date: Thu, 22 Feb 2018 07:46:12 GMT x-acs-signature-nonce: 550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method: HMAC-SHA1 x-acs-signature-version: 1.0 x-acs-version: 2016-01-02 示例:规范请求 POST application/json ChDfdfwC+Tn874znq7Dw7Q== application/x-www-form-urlencoded;charset=utf-8 Thu, 22 Feb 2018 07:46:12 GMT x-acs-signature-nonce: 550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method:HMAC-SHA1 x-acs-signature-version:1.0 x-acs-version:2016-01-02 /stacks?name=test_alert&status=COMPLETE 添加签名。 将计算好的签名以如下格式添加到请求的Header中: Authorization: acs AccessKeyId:Signature HTTP协议Header 计算签名必须包含一下参数,并按字典顺序排列;若值不存在则以“\n”补齐。 Accept :客户端需要的返回值类型,取值:application/json | application/xml Content-MD5:HTTP协议消息体的128-bit MD5散列值转换成BASE64编码的结果。 Content-Type:RFC 2616中定义的HTTP请求内容类型。 Date:HTTP 1.1协议中规定的GMT时间,例如:Wed, 05 Sep. 2012 23:00:00 GMT。 说明 不包含key。 示例:原始header Accept: application/json Content-MD5: ChDfdfwC+Tn874znq7Dw7Q== Content-Type: application/x-www-form-urlencoded;charset=utf-8 Date: Thu, 22 Feb 2018 07:46:12 GMT 示例:规范header application/json ChDfdfwC+Tn874znq7Dw7Q== application/x-www-form-urlencoded;charset=utf-8 Thu, 22 Feb 2018 07:46:12 GMT 阿里云协议Header (CanonicalizedHeaders) 阿里云规范头,非标准HTTP头部信息,是请求中出现的以x-acs-为前缀的参数。请求中必须包含以下参数: x-acs-signature-nonce:唯一随机数,用于防止网络重放攻击。在不同请求间要使用不同的随机数值。 x-acs-signature-version:签名版本,取值:1.0 x-acs-version:API版本号,请参照各产品的API文档。 完成以下操作,构造阿里云规范头: 将所有以x-acs-为前缀的HTTP请求头的名字转换成小写字母。如将X-acs-OSS-Meta-Name: TaoBao转换成x-acs-oss-meta-name: TaoBao。 将上一步得到的所有HTTP阿里云规范头按照字典序进行升序排列。 删除请求头和内容之间分隔符两端出现的任何空格。如将x-acs-oss-meta-name: TaoBao,Alipay转换成x-acs-oss-meta-name:TaoBao,Alipay。 将所有的头和内容用“\n”分隔符分隔拼成最后的CanonicalizedHeaders。 示例:原始header x-acs-signature-nonce: 550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method: HMAC-SHA1 x-acs-signature-version: 1.0 x-acs-version: 2016-01-02GMT 示例:规范header x-acs-signature-nonce:550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method:HMAC-SHA1 x-acs-signature-version:1.0 x-acs-version:2016-01-02 规范资源(CanonicalizedResource) CanonicalizedResource表示想要访问资源的规范描述,需要将子资源和query参数一同按照字典序,从小到大排列并以“&”为分隔符生成子资源字符串(?后的所有参数)。 示例:原始请求 /stacks?status=COMPLETE&name=test_alert 示例:规范请求 /stacks?name=test_alert&status=COMPLETE Body 将请求的body用MD5算法加密,在进行base64编码,将结果添加到Content-MD5中。

1934890530796658 2020-03-27 13:12:22 0 浏览量 回答数 0

回答

客户端错误 ErrorCode 错误代码 Message 错误信息 HTTP 状态码 OperationDenied Your account does not open SCDN service yet. 403 InsufficientBalance Your account does not have enough balance. 400 Forbidden.NotVerified Your account is not verified yet. 403 UnsupportedOperation The specified action is not supported. 400 NoSuchVersion The specified version does not exist. 400 UnsupportedParameter The parameter is not supported. 400 MissingParameter The input parameter that is mandatory for processing this request is not supplied. 400 InvalidParameter The specified parameter is not valid.Or The specified image does not support the specified instance type. 400 Throttling Request was denied due to request throttling. 400 InvalidAccessKeyId.NotFound The Access Key ID provided does not exist in our records. 404 Forbidden User not authorized to operate on the specified resource. 403 Forbidden.RiskControl This operation is forbidden by Aliyun Risk Control system. 403 Forbidden.AccessTooManyOthersResource This operator is forbidden because too many other one’s resource to be accessed. 403 SignatureDoesNotMatch The signature we calculated does not match the one you provided. Please refer to the API reference about authentication for details. 403 SignatureNonceUsed The request signature nonce has been used. 400 IdempotentParameterMismatch Request uses a client token in a previous request but is not identical to that request. 400 ChargeTypeViolation Operations on this kind of resources are not permitted. 403 InsufficientBalance Your account does not have enough balance. 400 QuotaExceeded Living instances quota exceeded. 400 OperationDenied Specified operation is denied as your resource is locked for security reasons. 403 RiskControl.Refused Your action was.refused by RiskControl. 400 QuotaExceeded.Snapshot Snapshot quota exceeded. 400 QuotaExceeded.Image Image quota exceeded. 400 服务器端错误 错误代码 错误信息 HTTP 状态码 InternalError The request processing has failed due to some unknown error, exception or failure. 500 ServiceUnAvailable The request has failed due to a temporary failure of the server. 503 如何调用接口 对SCDN服务接口的调用是通过向SCDN服务端发送HTTP请求(可以通过HTTP或HTTPS通道发送),并获取SCDN服务对该请求响应结果的过程。SCDN服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交或完成相应操作,并把处理的结果以HTTP响应地形式返回给调用者。 请求组成 请求由以下几个部分组成: HTTP方法——目前scdn服务的所有接口只支持GET方法的调用。 请求URL——请求的服务地址、要执行的操作名称、操作参数和公共请求参数都包含在请求的URL中。 服务端地址:scdn服务的域名是http://scdn.aliyuncs.com/和https://scdn.aliyuncs.com/。为了保证请求的安全性,强烈推荐您使用HTTPS通道。 (HTTPS加入了SSL层对通信进行了加密,可以防止通信被截获而导致敏感信息泄露。) 操作名称:每个接口都需要指定要执行的操作名称,即Action参数。 操作参数:根据要执行的操作不同,需要传入不同的操作参数,详见每个接口的说明。 公共请求参数:包含时间戳、签名信息等每个请求都要包含的参数。 为了使服务端能够正确地验证用户的身份并授权请求执行,请求在提交前要进行签名处理。签名的规则参见签名机制一节。 在服务端对请求处理完成后,会返回响应结果。响应结果分为成功结果和错误消息,格式描述参见JSON返回示例: { "RequestId": "4C467B38-3910-447D-87BC-AC049166F216", /* 返回结果数据 */ } 返回结果一节。客户端可以解析响应的消息体,得到执行结果。 调用示例 以DescribeScdnService接口为例: 对应的Action是DescribeScdnService。在添加了所有公共请求参数(除Signature)后,请求的URL是(为了便于阅读,这里是进行URL编码前的URL): http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10:33:56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2013-01-10&SignatureVersion=1.0 按照签名计算规则,先构造出规范化请求字符串(Canonicalized Query String),如下: http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10:33:56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2013-01-10&SignatureVersion=1.0 再构造出用于签名的字符串StringToSign值为: GET&%2F&AccessKeyId%3Dtestid%26Action% DescribeScdnService %26Format%3DXML%26SignatureMethod%3DHMAC-SHA1%26SignatureNonce%3DNwDAxvLU6tFE0DVb%26SignatureVersion%3D1.0%26TimeStamp%3D2012-12-26T10%253A33%253A56Z%26Version%3D2013-01-10 以下Java示例代码演示了如何添加公共请求参数、如何构造用请求参数构造规范化请求字符串,以及如何构造StringToSign字符串。示例假定所有请求参数放在一个Map <String, String>对象里,使用的Access Key ID是“testid”。 final String HTTP_METHOD = "GET"; …………………………………… 其中需要注意的是,TimeStamp参数要求符合ISO8601规范,并注意使用UTC时间,否则会遇到错误。下面的示例代码演示了如何生成符合规范的TimeStamp字符串: private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'"; private static String formatIso8601Date(Date date) { SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT); df.setTimeZone(new SimpleTimeZone(0, "GMT")); return df.format(date); } 生成规范化请求字符串(示例中的canonicalizedQueryString变量),以及stringToSign时,都需要进行必要的编码。编码的规则在签名机制一节中有详细描述。下面的示例代码演示了如何用java.net.URLEncoder类完成编码: private static final String ENCODING = "UTF-8"; private static String percentEncode(String value) throws UnsupportedEncodingException{ return value != null ? URLEncoder.encode(value, ENCODING).replace("+", "%20") .replace("*", "%2A").replace("%7E", "~") : null; } 假定使用的Access Key Id是“testid”,Access Key Secret是“testsecret”,用于计算HMAC的Key就是“testsecret&”,最终计算得到的签名值为: SDFQNvyH5rtkc9T5Fwo8DOjw5hc= 计算签名的示例代码(Java): // 以下是一段计算签名的示例代码 final String ALGORITHM = "HmacSHA1"; final String ENCODING = "UTF-8"; key = "testsecret&"; Mac mac = Mac.getInstance(ALGORITHM); mac.init(new SecretKeySpec( key.getBytes(ENCODING), ALGORITHM)); byte[] signData = mac.doFinal( stringToSign.getBytes(ENCODING)); String signature = new String(Base64.encodeBase64(signData)); 增加签名参数后,请按照RFC3986规则进行URL编码后得到的 http://scdn.aliyuncs.com/?TimeStamp=2012-12-26T10%3A33%3A56Z&Format=XML&AccessKeyId=testid&Action= DescribeScdnService &SignatureMethod=HMAC-SHA1&RegionId=region1&SignatureNonce=NwDAxvLU6tFE0DVb&Version=2012-09-13&SignatureVersion=1.0&Signature=SDFQNvyH5rtkc9T5Fwo8DOjw5hc%3d 接下来,通过HTTP请求的方式向上面的URL地址发送HTTP请求,并得到SCDN服务端的响应结果(示例): none 通过解析这个XML结果即可以得到所有可用的地域Id和LocalName的列表。如果在提交请求时,指定Format参数为JSON,那么返回结果的格式为JSON格式 如何保证幂等性 当通过调用创建实例接口在SCDN中创建云服务器时,如果遇到了请求超时或服务器内部错误时,客户端可能会尝试重发请求,这时客户端可以通过提供可选参数ClientToken避免服务器创建出比预期要多的实例,也就是通过提供ClientToken参数保证请求的幂等性。ClientToken是一个由客户端生成的唯一的、大小写敏感、不超过64个ASCII字符的字符串。 如果用户使用同一个ClientToken值调用创建实例接口,则服务端会返回相同的请求结果,包含相同的InstanceId。因此用户在遇到错误进行重试的时候,可以通过提供相同的ClientToken值,来确保SCDN只创建一个实例,并得到这个实例的InstanceId。 如果用户提供了一个已经使用过的ClientToken,但其他请求参数不同,则SCDN会返回 IdempotentParameterMismatch 的错误代码。但需要注意的是,SignatureNonce、Timestamp和Signature参数在重试时是需要变化的,因为scdn使用SignatureNonce来防止重放攻击,使用Timestamp来标记每次请求时间,所以再次请求必须提供不同的SignatureNonce和Timestamp参数值,这同时也会导致Signature值的变化。 通常,客户端只需要在500(InternetError)或503(ServiceUnAvailable)错误、或者无法得到响应结果的情况下进行重试操作。返回结果是200时,重试可以得到上次相同的结果,但不会对服务端状态带来任何影响。而对4xx的返回错误,除非提示信息里明确出现“try it later”,通常重试也是不能成功的。 欠费状态下的API行为 下列表中,“-” 表示无关,“正常逻辑逻辑”表示按照接口的正常逻辑逻辑执行并返回结果。 账户欠费时 接口 行为 描述 OpenScdnService 正常

保持可爱mmm 2020-03-29 15:47:37 0 浏览量 回答数 0

回答

本页目录 概述 计算签名 HTTP协议Header 阿里云协议Header(CanonicalizedHeaders) 规范资源(CanonicalizedResource) Body 为保证API的安全调用,在调用API时阿里云会对每个API请求通过签名(Signature)进行身份验证。无论使用HTTP还是HTTPS协议提交请求,都需要在请求中包含签名信息。 概述 RESTful API需要按如下格式在API请求头(request header)中添加Authorization参数进行签名: Authorization:acs:AccessKeyId:Singature 其中: acs:Alibaba Cloud Service的缩写,固定标识不可修改。 AccessKeyId:调用者调用API所用的密钥ID。 Signature:使用AccessKey Secret对请求进行对称加密的签名。 计算签名 签名算法遵循RFC 2104 HMAC-SHA1规范,使用AccessSecret对编码、排序后的整个请求串计算HMAC值作为签名。签名的元素是请求自身的一些参数,由于每个API请求内容不同,所以签名的结果也不尽相同。 Signature = Base64( HMAC-SHA1( AccessSecret, UTF-8-Encoding-Of( StringToSign)) ) 完成以下操作,计算签名: 构建待签名字符串。 待签名字符串(StringToSign)是API请求拼装的字符串,用于计算签名,包括: HTTP协议Header 阿里云协议Header(CanonicalizedHeaders) 规范资源(CanonicalizedResource) Body 待签名字符串必须按照以下顺序构造: StringToSign = //http协议Header HTTP-Verb + "\n" + Accept + "\n" + Content-MD5 + "\n" +//Body的MD5值放在此处 Content-Type + "\n" + Date + "\n" + //阿里云协议header(CanonicalizedHeaders) CanonicalizedHeaders + //签名中如何包含CanonicalizedResource(规范资源) CanonicalizedResource 示例:原始请求 POST /stacks?name=test_alert&status=COMPLETE HTTP/1.1 Host:***.aliyuncs.com Accept:application/json Content-MD5:ChDfdfwC+Tn874znq7Dw7Q== Content-Type:application/x-www-form-urlencoded;charset=utf-8 Accept-Encoding:identity Date:Thu, 22 Feb 2018 07:46:12 GMT x-acs-signature-method:HMAC-SHA1 x-acs-signature-nonce:550e8400-e29b-41d4-a716-446655440000 x-acs-signature-version:1.0 x-acs-version:2019-03-20 示例:待签名字符串 POST application/json ChDfdfwC+Tn874znq7Dw7Q== application/x-www-form-urlencoded;charset=utf-8 Thu, 22 Feb 2018 07:46:12 GMT x-acs-signature-method:HMAC-SHA1 x-acs-signature-nonce:550e8400-e29b-41d4-a716-446655440000 x-acs-signature-version:1.0 x-acs-version:2019-03-20 /stacks?name=test_alert&status=COMPLETE 添加签名。 将计算好的签名以如下格式添加到请求的Header中: Authorization: acs AccessKeyId:Signature HTTP协议Header 计算签名必须包含一下参数,并按字典顺序排列;若值不存在则以“\n”补齐。 Accept :客户端需要的返回值类型,取值:application/json | application/xml。 Content-MD5:HTTP协议消息体的128-bit MD5散列值转换成BASE64编码的结果。 Accept-Encoding:HTTP Header中Accept-Encoding 是浏览器发给服务器,声明浏览器支持的编码类型。 Content-Type:RFC 2616中定义的HTTP请求内容类型。 Date:HTTP 1.1协议中规定的GMT时间,例如:Wed, 05 Sep. 2012 23:00:00 GMT。 说明 不包含key。 示例:原始header Accept:application/json Content-MD5:ChDfdfwC+Tn874znq7Dw7Q== Content-Type:application/x-www-form-urlencoded;charset=utf-8 Accept-Encoding:identity Date:Thu, 22 Feb 2018 07:46:12 GMT 示例:规范header application/json ChDfdfwC+Tn874znq7Dw7Q== application/x-www-form-urlencoded;charset=utf-8 Thu, 22 Feb 2018 07:46:12 GMT 阿里云协议Header(CanonicalizedHeaders) 阿里云规范头,非标准HTTP头部信息,是请求中出现的以x-acs-为前缀的参数。请求中必须包含以下参数: x-acs-signature-nonce:唯一随机数,用于防止网络重放攻击。在不同请求间要使用不同的随机数值。 x-acs-signature-version:签名版本,取值:1.0 x-acs-version:API版本号,请参照各产品的API文档。 完成以下操作,构造阿里云规范头: 将所有以x-acs-为前缀的HTTP请求头的名字转换成小写字母。如将X-acs-OSS-Meta-Name: TaoBao转换成x-acs-oss-meta-name: TaoBao。 将上一步得到的所有HTTP阿里云规范头按照字典序进行升序排列。 删除请求头和内容之间分隔符两端出现的任何空格。如将x-acs-oss-meta-name: TaoBao,Alipay转换成x-acs-oss-meta-name:TaoBao,Alipay。 将所有的头和内容用“\n”分隔符分隔拼成最后的CanonicalizedHeaders。 示例:原始header x-acs-signature-nonce:550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method:HMAC-SHA1 x-acs-signature-version:1.0 x-acs-version: 2019-03-20GMT 示例:规范header x-acs-signature-nonce:550e8400-e29b-41d4-a716-446655440000 x-acs-signature-method:HMAC-SHA1 x-acs-signature-version:1.0 x-acs-version:2019-03-20 规范资源(CanonicalizedResource) CanonicalizedResource表示想要访问资源的规范描述,需要将子资源和query参数一同按照字典序,从小到大排列并以“&”为分隔符生成子资源字符串(?后的所有参数)。 示例:原始请求 /stacks?status=COMPLETE&name=test_alert 示例:规范请求 /stacks?name=test_alert&status=COMPLETE Body 将请求的body用MD5算法加密,在进行base64编码,将结果添加到Content-MD5中。

1934890530796658 2020-03-23 14:42:33 0 浏览量 回答数 0

问题

消息服务的消息通知常见问题有哪些?

轩墨 2019-12-01 22:10:46 935 浏览量 回答数 0

问题

如何将RDS数据备份到本地MySQL 数据库?

仟与仟寻 2019-12-01 21:03:20 4779 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 企业信息查询 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 企业建站模板