工具系列 | HTTP API 身份验证和授权
Posted 万少波的播客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了工具系列 | HTTP API 身份验证和授权相关的知识,希望对你有一定的参考价值。
介绍
在用户使用API发出请求之前,他们通常需要注册API密钥或学习其他方法来验证请求。
API认证用户的方式各不相同。有些API要求您在请求头中包含一个API密钥,而其他API则由于需要保护敏感数据、证明身份并确保请求不被篡改而需要精心设计的安全性。
二者定义
认证(authentication):指证明身份正确
授权(authorization):指允许某种行为
API可能会对您进行身份验证,但不会授权您发出特定请求。
认证(authentication)
身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。系统确定您是否就是您所说的使用凭据。在公共和专用网络中,系统通过登录密码验证用户身份。身份验证通常通过用户名和密码完成,有时与身份验证因素结合使用,后者指的是各种身份验证方式。
身份验证因素决定了系统在授予访问文件和请求银行交易之外的任何内容之前验证某人身份的各种要素。用户的身份可以通过他所知道的,他拥有的或者他是什么来确定。在安全性方面,必须至少验证两个或所有三个身份验证因素,以便授予某人访问系统的权限。
身份验证因素
单因素身份验证
这是最简单的身份验证方法,通常依赖于简单的密码来授予用户对特定系统(如网站或网络)的访问权限。此人可以仅使用其中一个凭据请求访问系统以验证其身份。单因素身份验证的最常见示例是登录凭据,其仅需要针对用户名的密码。
双因素身份验证
顾名思义,它是一个两步验证过程,不仅需要用户名和密码,还需要用户知道的东西,以确保更高级别的安全性,例如ATM引脚,用户知道。使用用户名和密码以及额外的机密信息,欺诈者几乎不可能窃取有价值的数据。
多重身份验证
这是最先进的身份验证方法,它使用来自独立身份验证类别的两个或更多级别的安全性来授予用户对系统的访问权限。所有因素应相互独立,以消除系统中的任何漏洞。金融机构,银行和执法机构使用多因素身份验证来保护其数据和应用程序免受潜在威胁。
例如,当您将ATM卡输入ATM机时,机器会要求您输入您的PIN。在您正确输入引脚后,银行会确认您的身份证明该卡真正属于您,并且您是该卡的合法所有者。通过验证您的ATM卡引脚,银行实际上会验证您的身份,这称为身份验证。它只是确定你是谁,没有别的。
JWT 认证介绍
JWT(JSON Web Tokens)是一个比较标准的认证解决方案,这个技术在Java圈里应该用的是非常普遍的。JWT签名也是一种MAC(Message Authentication Code)的方法。
JSON Web Token 入门教程
签名流程
用户使用用户名和口令到认证服务器上请求认证。
认证服务器验证用户名和口令后,以服务器端生成JWT Token,这个token的生成过程如下:
认证服务器还会生成一个 Secret Key(密钥)
对JWT Header和
JWT Payload
分别求Base64。在Payload可能包括了用户的抽象ID和的过期时间。用密钥对JWT签名
HMAC-SHA256(SecertKey, Base64UrlEncode(JWT-Header)+'.'+Base64UrlEncode(JWT-Payload))
;然后把 base64(header).base64(payload).signature 作为 JWT token返回客户端。
客户端使用JWT Token向应用服务器发送相关的请求。这个JWT Token就像一个临时用户权证一样。
授权(authorization)
授权是确定经过身份验证的用户是否可以访问特定资源的过程。它验证您是否有权授予您访问信息,数据库,文件等资源的权限。授权通常在验证后确认您的权限。简单来说,就像给予某人官方许可做某事或任何事情。
对系统的访问受身份验证和授权的保护。可以通过输入有效凭证来验证访问系统的任何尝试,但只有在成功授权后才能接受。如果尝试已通过身份验证但未获得授权,系统将拒绝访问系统。
例如,验证和确认组织中的员工ID和密码的过程称为身份验证,但确定哪个员工可以访问哪个楼层称为授权。假设您正在旅行而且即将登机。当您在登记前出示机票和一些身份证明时,您会收到一张登机牌,证明机场管理局已对您的身份进行了身份验证。但那不是它。乘务员必须授权您登上您应该乘坐的航班,让您可以进入飞机内部及其资源。
Casbin 授权介绍
Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
Casbin可以做到
支持自定义请求的格式,默认的请求格式为
{subject, object, action}
。具有访问控制模型model和策略policy两个核心概念。
支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。
支持超级用户,如 root 或 Administrator,超级用户可以不受授权策略的约束访问任意资源。
支持多种内置的操作符,如 keyMatch,方便对路径式的资源进行管理,如 /foo/bar 可以映射到 /foo*
小结
虽然这两个术语经常相互结合使用,但它们的概念和含义完全不同。虽然这两个概念对于Web服务基础结构至关重要,特别是在授予对系统的访问权限时,理解关于安全性的每个术语是关键。
虽然我们大多数人将一个术语与另一个术语混淆,但理解它们之间的关键区别很重要,实际上非常简单。如果身份验证是您的身份,则授权是您可以访问和修改的权限。
简单来说,身份验证就是确定某人是否是他声称的人。另一方面,授权是确定他访问资源的权利。
以上是关于工具系列 | HTTP API 身份验证和授权的主要内容,如果未能解决你的问题,请参考以下文章
不使用 HTTP 基本身份验证时 HTTP 401 未经授权?
asp.net web api 2 CORS 和身份验证授权配置
SOA:Rails 多个客户端的用户身份验证和 api 授权