原文地址:https://www.cnblogs.com/Sinte-Beuve/p/7822856.html

1. 类似HTTP Basic Authentication
随意在网上搜索公共API服务,比如下图中的百度基站查询的接口。

这种接口一般付费之后会获取到一个apikey,通过apikey进行请求。和HTTP Basic Authentication类似,需要把apikey这个字段写入HTTP header中,服务器验证后,返回相应的结果。

总结:也许是因为公共api的原因吧,所以验证的方式比较简单。下面会讲到,同样是百度的api,在获取地理数据方面,验证方式会严格很多。当然即便是有人恶意抓包获取到付费用户的apikey,也不会造成太大的危害。这类型的接口一般都有当天最大的请求次数,同时用户也很容易发现。

参考:

  • 基站数据查询

2. 百度LBS接口加密的方式

上图是百度地图中的API服务,通过IP来获取获取位置信息。
他的加密方式如下:

首先,购买了此服务的开发者会拿到ak(apikey)和sk(secretkey)。接口调用时除了公共参数之外,还需要ak和sn两个参数。sn是一个用特定算法生成的加密串。

sn生成算法

  1. url后的参数根据键值的字典排序(get不需要),拼接成字符串,utf-8编码。
  2. 拼接sk后再utf-8编码
  3. md5编码。

服务器接收到参数后,通过开发者的ak获取到sk,再根据上述操作,生成sn进行比对,验证通过后,调用相应的接口返回结果。

总结:这种方法提到了ak和sk,有一种RSA的味道,安全性显然比上一种强很多。由于私钥是不传播的,只要做好秘钥管理,应该还是比较难破解的。

参考:

  • 利用IP获取大致位置
  • sn计算规则

3. OAuth2.0
原理不多讲,两次握手获取认证,授权获取相关资源。好像app上用到的不多,最多的应用是在复杂系统的单点登录和第三方登录上(可参考微博、QQ登录,微信公众号授权等)。

参考:

  • 阮一峰——理解OAuth 2.0
  • 帮你深入理解OAuth2.0协议
  • 微信网页授权

4. 类似OAuth2.0的access_token和refresh_token
熟悉OAuth2.0的开发者都知道,整个授权流程。

  1. 授权获取code。
  2. 通过code获取access_token和refresh_token。
  3. 根据access_token请求资源。

那么问了杭州某移动互联网公司的小伙伴他们认证方案。结果就是简化版的OAuth2.0。

  1. 用户登录后,后台签发access_token和refresh_token。
  2. access_token过期后使用refresh_token进行刷新。
  3. refresh_token过期,app提示重新登录。类似OAuth2.0的重新授权。

5. JWT
JSON Web Token,2015年出的一个标标准(RFC 7519)。

JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is used as the payload of a JSON Web Signature (JWS) structure or as the plaintext of a JSON Web Encryption (JWE) structure, enabling the claims to be digitally signed or integrity protected with a Message Authentication Code (MAC) and/or encrypted.

简单来讲就是一个加密串,和传统的token不同,这个加密串不是nosense,而是可以解密成两段json数据。加密串如下所示,点分三段式结构。

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

解密后分为两段json:

{'typ': 'JWT','alg': 'HS256'
}
{"sub": "1234567890","name": "John Doe","admin": true
}

综上JWT的形式是这样的:
[json1 base64加密].[json2 base64加密].[(json1加密后+json2加密后+secret) sha256加密]

总结:详细的原理可以看那篇我翻译的文章。那么和传统的token相比就很有优势了。当移动app登录,API服务器获取用户的ID加上过期时间等信息生成JWT,签发给app。下次app调用API附带JWT,服务端解析后,返回结果。由于所有的信息都存在JWT中,也就不需要使用数据库存储和查询,这些额外的开销了。

参考:

  • RFC 7519
  • 什么是 JWT -- JSON WEB TOKEN
  • JSON Web Tokens - jwt.io

总结

目前看到的认证方式基本上就是以上这几种,当然还有上述几种的组合,例如OAuth2.0+JWT。服务器对API的使用者进行认证,虽然增加了一定的工作量,但是对整个系统的安全性还是有提高的。

几种API调用认证方案浅析相关推荐

  1. Java调用Tuxedo方案浅析

    Tuxedo为业界公认的性能.稳定性.健壮性都非常好的中间件之一,之所以能做到这么好的稳定性和健壮性,其采用私有的通讯协议是原因之一.因为采用私有的通讯协议,所以客户端与服务端的通讯质量可以全部由Tu ...

  2. 微信支付、微信公众号接口认证方案

    1 微信公众号接口认证方案 1.1 认证流程 安全API接口认证方案 流程图模板_ProcessOn思维导图.流程图​www.processon.com/view/link/636e05a21e085 ...

  3. 如何为***选择合适的动态密码双因素认证方案

    CKEY动态密码认证是双因子认证的一种方式,×××用户增加动态密码认证,借助此方案可以提升×××远程拨入安全,加强登陆用户审计. CKEY为×××提供短信密码.硬件令牌.软件令牌.短信密码+硬件令牌混 ...

  4. Web APi之认证(Authentication)两种实现方式【二】(十三)

    前言 上一节我们详细讲解了认证及其基本信息,这一节我们通过两种不同方式来实现认证,并且分析如何合理的利用这两种方式,文中涉及到的基础知识,请参看上一篇文中,就不再叙述废话. 序言 对于所谓的认证说到底 ...

  5. mysql8.0 密码认证插件_只需使用VS Code的REST客户端插件即可进行API调用

    为什么要离开IDE去测试新的API?现在你不必这样做了. 我们如何获取数据 如果你已经做了很长时间的Web开发,你可能知道我们的很多工作都是围绕着数据展开的:读取数据.写入数据.操作数据,并以合理的方 ...

  6. 一种基于区块链的数字身份认证方案

    一种基于区块链的数字身份认证方案 0 摘要 1 概要介绍 1.1 企业化 1.2 联盟式 1.3 用户中心化 1.4 本文创新点 2 方案基础知识介绍 2.1 密码学工具与算法 2.1.1 随机数 2 ...

  7. swr,解决 React 项目 API 调用的最好方案

    swr,解决 React 项目 API 调用的最好方案 搜了一圈,感觉 swr 源码学习的文章不少,但是好像使用方面的确实有限,所以-- 目前体感是觉得使用 swr 会比 redux-saga 要舒服 ...

  8. 【虚幻引擎UE】UE5 三种模式调用API详解(案例基于免费Varest插件)

    [虚幻引擎UE]UE5 三种模式调用API详解(案例基于免费Varest插件) 想通过UE5 调用API实现GET和POST, 可以通过自己编写C++方法, 或基于相关HTTP请求插件, 如Vares ...

  9. REST API安全认证研究!

    作者:zollty,资深程序员和架构师,私底下是个爱折腾的技术极客,架构师社区合伙人! 一.概述 对外网暴露的RESTful API,由于是无状态的,如果不做认证,那就相当于裸奔的,任何人都可以调用, ...

最新文章

  1. redis 主从复制的核心原理
  2. 最新(2019/3)CSDN博客Markdown编辑格式说明,包含效果图
  3. VMware vSphere简介
  4. PyPI又双叒叕发现恶意软件,能盗取信用卡还有后门程序
  5. 为什么 HTTPS 是安全的?
  6. 【转】matlab函数编译成dll供Cpp调用的方法
  7. 用VScode配置Python开发环境引用
  8. c语言爬虫和python爬虫_为什么写爬虫都喜欢用python?
  9. php和python-PHP和Python性能比较:放弃PHP改用Python
  10. MATLAB2017a安装破解教程
  11. 微信外卖点餐系统开发教程
  12. C语言控制51单片机音乐报告,51单片机_音乐_天空之城_C语言
  13. y-在C语言while语句中的意义,c语言while用法(C语言while用法)
  14. 在不损坏硬盘数据情况下,MBR格式转GPT格式,手动创建EFI和MSR分区,安装win8/win10
  15. Java工程师职业怎么规划?
  16. 【无标题】计统大作业-hello
  17. 马原(2023版)导论笔记
  18. Idea新建项目名后出现中括号别名
  19. 第七天 01.ssh服务 使用堡塔以及xshell等连接linux
  20. 设备驱动程序是什么?为什么要有设备驱动程序?用户进程怎样使用驱动程序?

热门文章

  1. 图片kb太大怎么压缩变小?
  2. 关于有理式部分分式化解的初步理解
  3. 基于STM32的485通讯传感器采集程序
  4. 【Ogre编程入门与进阶】第一章 Ogre3D概述
  5. 彩票算法系列讲座(一)
  6. NandFlash K9F1208U0A/ K9F1208U0B的读取操作
  7. IE7首页被http://runonce.msn.com/runonce3.aspx锁定时的修改方法
  8. tomcat限速_网络限速
  9. 【C++】从1加到100
  10. (已解决)关于openwrt路由器重启后zerotier的ip变化处理