跨平台应用开发进阶(三十二) :AK/SK鉴权原理简介

一、前言

ak/sk是一种身份认证方式,常用于系统间接口调用时的身份验证,其中akAccess Key IDskSecret Access Key。客户端和服务端两者会协商保存一份相同的sk,其中sk必须保密。

AK : Access Key Id,⽤于标⽰⽤户;

SK : Secret Access Key,是⽤户⽤于加密认证字符串和⽤来验证认证字符串的密钥,其中SK必须保密。

通过使⽤Access Key Id / Secret Access Key加密的⽅法来验证某个请求的发送者⾝份。

客户端在调用服务端接口的时候,会带上ak以及signature(使用sk对内容进行加密后得出的签名)进行请求,在服务端接收到这个请求的时候,首先会根据ak去数据库里面去找到对应的sk,然后使用sk对请求内容进行加密得到一个签名,然后对比客户端传过来的签名和服务端计算的出来的签名是否一致,如果一致则代表身份认证通过,反之则不通过。

二、AK/SK使⽤机制

云主机接收到⽤户的请求后,系统将使⽤AK对应的相同的SK和同样的认证机制⽣成认证字符串,并与⽤户请求中包含的认证字符串进⾏⽐对。如果认证字符串相同,系统认为⽤户拥有指定的操作权限,并执⾏相关操作;如果认证字符串不同,系统将忽略该操作并返回错误码。

三、流程

  1. 判断⽤户请求中是否包含Authorization认证字符串。如果包含认证字符串,则执⾏下⼀步操作。

  2. 基于HTTP请求信息,使⽤相同的算法,⽣成Signature字符串。

  3. 使⽤服务器⽣成的Signature字符串与⽤户提供的字符串进⾏⽐对,如果内容不⼀致,则认为认证失败,拒绝该请求;如果内容⼀致,则表⽰认证成功,系统将按照⽤户的请求内容进⾏操作。

客户端

markdown 复制代码
1. 构建http请求(包含 access key);

2. 使⽤请求内容和使⽤secret access key计算的签名(signature);

3. 发送请求到服务端。

服务端

markdown 复制代码
1. 根据发送的access key 查找数据库得到对应的secret-key;

2. 使⽤同样的算法将请求内容和 secret-key ⼀起计算签名(signature),与客户端步骤2相同;

3. 对⽐⽤户发送的签名和服务端计算的签名,两者相同则认证通过,否则失败。

四、应用示例

设计ak/sk的请求参数

  • platform_type:标明请求方是谁,即该例子中的ak

  • time:请求时间,时间戳,将会被对应的sk配合加密算法进行加密,得到一个signature签名。

  • sign:签名,使用sk配合对应的加密算法后进行加密得到的签名。

当发送请求时,请求端会带上这几个参数去请求接口,如请求

javascript 复制代码
https:///xxx.com/students?platform_type=school&time=1640494526&sign=54acba6857b284a8a481ed5913edd34d994721cc584305ff02c81bb3ced17212

五、拓展阅读

相关推荐
一只小阿乐3 小时前
react 封装弹框组件 传递数据
前端·javascript·react.js
533_4 小时前
[element-plus] el-tree 动态增加节点,删除节点
前端·javascript·vue.js
禁止摆烂_才浅4 小时前
前端开发小技巧-【JavaScript】- 获取元素距离 document 顶部的距离
前端·javascript·react.js
wshzd4 小时前
LLM之Agent(二十九)|LangChain 1.0核心组件介绍
前端·javascript·langchain
程序猿_极客4 小时前
Vue 2脚手架从入门到实战核心知识点全解析(day6):从工程结构到高级通信(附代码讲解)
前端·javascript·vue.js·vue2学习笔记
q***71854 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
web加加4 小时前
vue3 +vite项目页面防f12,防打开控制台
前端·javascript·vue.js
A尘埃5 小时前
大模型应用python+Java后端+Vue前端的整合
java·前端·python
遥遥晚风点点6 小时前
Spark导出数据文件到HDFS
前端·javascript·ajax
克里斯蒂亚L6 小时前
开发一个计时器组件
前端·浏览器