本文主要讨论一下jwt和HMAC(AK/SK)的使用场景

jwt

一般是由用户先发送用户名、秘密,认证通过后服务器返回jwt,其中包含三段信息:

Header,记录jwt元数据

Payload,记录真实要传递的数据

Signature,记录数据签名

其中Signature是根据jwt签名算法+服务端自定义的秘钥生成的hash信息

关键就是这个服务器自定义秘钥,达到两个效果:完整性验证,如果传输过程中被篡改,签名会对不上(这个由hash算法保证)

验证成功,同时也意味着认证成功

由于自定义秘钥,也限制了jwt一般用于单一服务的登陆和认证,对于多个服务,可能由于各自的秘钥不一致,甚至Payload信息不一样,无法在多个服务之间跨服务认证

适用场景:存在用户登陆,用户通过密码换取jwt,后续使用jwt交互

简单的实体认证,由服务方直接分发一个生成的jwt给另一方,另一方每次带着jwt访问接口,常用于认证其他接口实体,但安全性较弱

HMAC(AK/SK)

HMAC预先生成一个 access key(AK) 和 secure key(SK),然后通过签名的方式完成认证请求,这种方式可以避免传输 secure key,且大多数情况下签名只允许使用一次,避免了重放攻击。

基本过程如下:客户端需要在认证服务器中预先设置 access key(AK 或叫 app ID) 和 secure key(SK)

在调用 API 时,客户端需要对参数和 access key 进行自然排序后并使用 secure key 进行签名生成一个额外的参数 digest

服务器根据预先设置的 secure key 进行同样的摘要计算,并要求结果完全一致

func signKey(data []string, appID, ts, key string) string {

w := md5.New()

data = append(data, SSOAppID, ts, SSOKey)

io.WriteString(w, strings.Join(data, ":"))

return fmt.Sprintf("%x", w.Sum(nil))

}

// 使用HMAC验证sign := signKey([]string{data}, SSOAppID, ts, SSOKey)

req := httplib.Post(ssoURL)

req.Param("appId", SSOAppID)

req.Param("timestamp", ts)

req.Param("data", data)

req.Param("sign", sign)

var res SSOResp

if err := req.ToJSON(&res); err != nil {

return "", err

}

与jwt的区别:

服务端不仅有一个秘钥,同时还给每个调用实体分发一个appid

数据由调用双方约定好,可以是map、array、string等任意数据

带有时间戳验证,每次调用的签名都不一样,安全性高

签名是双方根据算法自动计算,不需要登陆换取token

适用场景:

api间互相调用的认证

jwt和hmac结合实现跨系统调用

在平时开发中一种常见的场景是一个用户从服务A跳转到服务B,而且是带着服务A的认证(token或者cookie)过来,如果让用户从新登陆也不合适,常见的做法是:服务B获取服务A的token

服务B使用服务A预先分发的ak和sk,将token作为数据,使用HMAC算法计算签名

服务B调用服务A的token认证解析接口

服务A返回是否认证以及认证的结果

服务B根据认证结果进行下一步操作

补充

认证是 authentication,指的是当前用户的身份,当用户登陆过后系统便能追踪到他的身份做出符合相应业务逻辑的操作。即使用户没有登录,大多数系统也会追踪他的身份,只是当做来宾或者匿名用户来处理。认证技术解决的是 “我是谁?”的问题。

授权则不同,授权是 authorization,指的是什么样的身份被允许访问某些资源,在获取到用户身份后继续检查用户的权限。单一的系统授权往往是伴随认证来完成的,但是在开放 API 的多系统结构下,授权可以由不同的系统来完成,例如 OAuth。授权技术是解决“我能做什么?”的问题。细说API - 认证、授权和凭证​insights.thoughtworks.cn

cookie、session、jwt不是本文重点,具体见李志华:cookie、session、jwt​zhuanlan.zhihu.com

ak和sk怎么认证 海康威视_JWT和HMAC(AK/SK)认证方式使用场景相关推荐

  1. ak和sk怎么认证 海康威视_公有云API的认证方式:AK/SK 简介

    1 公有云API的认证方式 一般有一夏几种认证方式: Token认证 AK/SK认证 RSA非对称加密方式 下面主要介绍AK/SK 1 AK/SK 1.1 AK/SK 原理 云主机需要通过使用Acce ...

  2. ak和sk怎么认证 海康威视_aksk鉴权

    简介 鉴权功能的位置处于基础服务的接入网关中. 1. 认证简介 本鉴权方案是在api层面上进行,通过使用Access Key/Secret Key加密的方法来对验证某个请求的调用者身份. 当接入网关接 ...

  3. Nginx Http认证 实现访问网站或目录密码认证保护

    对于实现访问网站或目录密码认证保护,nginx的HTTP基本认证模块(HTTP Auth Basic)可以实现. 这个模块提供基于用户名与密码的验证来保护你的站点或站点的一部分. step1: 打开c ...

  4. 阐述Spring security实现用户认证授权的原理----基于session实现认证的方式

    一.认证流程 基于Session认证方式的流程是,用户认证成功后,在服务端生成用户相关的数据保存在session(当前会话),而发 给客户端 sesssion_id 存放到 cookie 中,这样用客 ...

  5. 多点认证wi-fi_准备使用Wi-Fi 6:认证将于2019年第三季度启动

    多点认证wi-fi The Wi-Fi Alliance already announced Wi-Fi 6 back in October. Today, it's announcing the d ...

  6. 5gh掌上云计算认证不通过_阿里云ACP认证考试攻略、考试心得、费用及常见问题...

    阿里云ACP级认证是阿里云的专业工程师认证,云吞铺子分享ACP认证考试攻略.考试心得.考试费用及常见问题: ACP认证分类 ACP认证根据所属领域不同分为五类,即即云计算.大数据.大数据分析师.云安全 ...

  7. java多因子认证,Milvus 实战|生物多因子认证系列 (二):人脸识别

    视觉 AI 作为一个已经发展成熟的技术领域,具有丰富的应用场景和商业化价值,全球 40% 的 AI 企业都集中在视觉 AI 领域.近年来,视觉 AI 除了在智能手机.智能汽车.智慧安防等典型行业中发挥 ...

  8. android人脸身份认证,Android通过支付宝进行刷脸认证

    Android通过支付宝进行刷脸认证 官方文档快速接入 一.简介 支付宝刷脸认证是通过支付宝人脸识别进行身份校验,主要包括三个模块身份认证初始化服务.开始认证.认证结果查询 二.应用场景 认证场景码 ...

  9. 基于 钉钉认证 通过 华为、H3C 结合 OpenPortal认证计费系统 实现 网络准入 钉钉授权 实名认证

    基于 钉钉认证 通过 华为.H3C 结合 OpenPortal认证计费系统 实现 网络准入 钉钉授权 实名认证 在企业园区网络中,需要结合钉钉实现网络安全准入实名认证,方案中企业网络设备可以是华为(如 ...

  10. 苹果开发者账号注册第一步,Apple ID 的双重认证,为 Apple ID 设置双重认证

    苹果开发者账号注册第一步,Apple ID 的双重认证,为 Apple ID 设置双重认证 https://support.apple.com/zh-cn/HT204915 有苹果电脑就可以 在装有 ...

最新文章

  1. python 把2个列表或者2个元组转成字典
  2. ICRA 2021| 具有在线校准功能的高效多传感器辅助惯性导航系统
  3. java 切面获取参数_每天分享一点Java知识(spring-aop)
  4. 戴尔笔记本win8全新安装
  5. 你见过的MCU最高GPIO翻转频率是多少?
  6. Oracle Database 11g Express Edition使用限制,与其他版本的区别
  7. LeetCode 767. 重构字符串
  8. opencv matlab配置,Matlab下运行c++程序的配置(包含opencv的c++程序)
  9. cocos2d-X   CCSprite设置贴图(图片)大小
  10. 数据库更新DATE类型的时间
  11. c语言链表小甲鱼,有大佬做过小甲鱼双向链表实践吗小甲鱼
  12. 计算机指法标准,标准盲打指法练习
  13. 无盘服务器固态硬盘做什么盘,哪个固态硬盘无盘服务器上最好?固态硬盘无盘服务器上详细介绍。...
  14. 有些人 总是莫名其妙的得罪了
  15. Romax Nexus—机电一体传动系统设计与仿真平台
  16. 计算机与网络基础知识的问答
  17. 网络安全学习:系统基础命令操作
  18. 看纸箱设备厂家如何定义包装纸箱的
  19. 吐血整理一个月——终于把所有Python库整理齐了.....
  20. 讲python讲得好的评价_分析20万条弹幕告诉你,8.9分的高分剧《隐秘的角落》到底好看在哪儿?...

热门文章

  1. getElementById和querySelector方法的区别
  2. 关于编码问题,报错:'gbk' codec can't encode character '\u3164' in position 0: illegal multibyte sequence...
  3. python之optparse模块
  4. 关于javascript控制系统弹出下载提示 用以下载图片
  5. H3C ipv6路由实验
  6. 游戏开发之C++内联函数--不受程序员控制的一个函数(C++基础)
  7. BGP增强特性(华为设备)
  8. HDOJ--1262--寻找素数对
  9. python yield,到这个层次,才能叫深入哈
  10. 关于《停止学习框架》 - 讨论