Postman鉴权

article/2025/9/19 7:17:28

Ok, 今天我们来学习 一下 鉴权

鉴权(authentication) 是指验证用户是否拥有访问系统的权利。传统的鉴权是通过密码来验证的。这种方式的前提是,每个获得密码的用户都已经被授权。在建立用户时,就为此用户分配一个密码,用户的密码可以由管理员指定,也可以由用户自行申请。这种方式的弱点十分明显:一旦密码被偷或用户遗失密码,情况就会十分麻烦,需要管理员对用户密码进行重新修改,而修改密码之前还要人工验证用户的合法身份。

为了克服这种鉴权方式的缺点,需要一个更加可靠的鉴权方式。目前的主流鉴权方式是利用认证授权来验证数字签名的正确与否。

逻辑上,授权发生在鉴权之后,而实际上,这两者常常是一个过程。

我们常用的鉴权有四种:

1、HTTP Basic Authentication

2、session-cookie

3、Token 验证

4、OAuth(开放授权)

其他几种,自己去看 相关资料, 今天着重讲下这种 HTTP Basic Authentication

这种授权方式是浏览器遵守http协议实现的基本授权方式,HTTP协议进行通信的过程中,HTTP协议定义了基本认证认证允许HTTP服务器对客户端进行用户身份证的方法。

认证过程:

1. 客户端向服务器请求数据,请求的内容可能是一个网页或者是一个ajax异步请求,此时,假设客户端尚未被验证,则客户端提供如下请求至服务器:

Get /index.html HTTP/1.0
Host:www.google.com

2. 服务器向客户端发送验证请求代码401,(WWW-Authenticate: Basic realm=”google.com”这句话是关键,如果没有客户端不会弹出用户名和密码输入界面)服务器返回的数据大抵如下:

HTTP/1.0 401 Unauthorised
Server: SokEvo/1.0
WWW-Authenticate: Basic realm=”google.com”
Content-Type: text/html
Content-Length: xxx

3. 当符合http1.0或1.1规范的客户端(如IE,FIREFOX)收到401返回值时,将自动弹出一个登录窗口,要求用户输入用户名和密码。

4. 用户输入用户名和密码后,将用户名及密码以BASE64加密方式加密,并将密文放入前一条请求信息中,则客户端发送的第一条请求信息则变成如下内容:

Get /index.html HTTP/1.0
Host:www.google.com
Authorization: Basic d2FuZzp3YW5n

注:d2FuZzp3YW5n表示加密后的用户名及密码(用户名:密码 然后通过base64加密,加密过程是浏览器默认的行为,不需要我们人为加密,我们只需要输入用户名密码即可)

5. 服务器收到上述请求信息后,将Authorization字段后的用户信息取出、解密,将解密后的用户名及密码与用户数据库进行比较验证,如用户名及密码正确,服务器则根据请求,将所请求资源发送给客户端。

效果:
客户端未未认证的时候,会弹出用户名密码输入框,这个时候请求时属于pending状态,这个时候其实服务当用户输入用户名密码的时候客户端会再次发送带Authentication头的请求。

我们以Postman 官方 api 为例

img

很多时候,出于安全考虑我们的接口并不希望对外公开。这个时候就需要使用授权(Authorization)机制 授权过程验证您是否具有访问服务器所需数据的权限。 当您发送请求时,您通常必须包含参数,以确保请求具有访问和返回所需数据的权限。 Postman提供授权类型,可以轻松地在Postman本地应用程序中处理身份验证协议。

Postman支持的授权协议类型如下:

  • Inherit auth from parent:是默认的鉴权方式,继承;
  • No Auth:代表不需要鉴权
  • bearer token 鉴权:一般也叫 Json web token,就是发送一个 json 格式的 token 令牌,服务端会针对 token 进行解密验证
  • Basic Auth 基础验证:提供用户名密码验证,postman 会自动生成 authorization,属于最常用鉴权方式
  • digest auth,摘要式认证。在基本身份认证上面扩展了安全性,服务器为每一个连接生成一个唯一的随机数,客户端用这个随机数对密码进行 MD5 加密,然后返回服务器,服务器也用这个随机数对密码进行加密,然后和客户端传送过来的加密数据进行比较,如果一致就返回结果。
    它是一个二次验证的过程,会有两次认证交互消息。客户端请求资源->服务器返回认证标示->客户端发送认证信息->服务器查验认证。
  • Oauth,一般用于第三方认证,有1,2两个版本,需要提供的信息不太一样。也是常用的鉴权方式
  • Hawk 认证,是另一种认证方案,采用的叫消息码认证算法,和 Digest 认证类似,它也是需要二次交互的
  • AWS 签名认证:是针对亚马逊的 AWS 公有云用户签名的认证方式
  • NTLM:是微软的局域网管理认证协议
  • Akamai EdgeGrid:是 Akamai 的专属认证协议
    其中最重要的鉴权方式为:Basic 以及 OAuth2,下面我们通过实例演示下这两种鉴权方式;

Basic auth

基本身份验证是一种比较简单的授权类型,需要经过验证的用户名和密码才能访问数据资源。这就需要我们输入用户名和对应的密码。

案例:请求URL如下,授权账号为:

  • 用户名 : postman
  • 密码 : password
  • 授权协议为: Basic auth

https://postman-echo.com/basic-auth

  • 如果不输入用户名密码,直接使用GET请求,则会返回提示:Unauthorized
  • 输入用户名密码,选择Basic auth授权类型,则会返回如下结果:
"authenticated": true

img

Digest Auth

Digest auth是一个简单的认证机制,最初是为HTTP协议开发的,因此也常叫做HTTP摘要。其身份验证机制非常简单,它采用哈希加密方法,以避免用明文传输用户的口令。摘要认证就是核实参与通信的两方都知道双方共享的一个口令。

当server想要查证用户的身份,它产生一个摘要盘问(digest challenge),并发送给用户。典型的摘要盘问例如以下:

Digest realm=“iptel.org”, qop=“auth,auth-int”, nonce=“dcd98b7102dd2f0e8b11d0f600bfb0c093”, opaque="", algorithm=MD5

这里包含了一组参数,也要发送给用户。用户使用这些参数,来产生正确的摘要回答,并发送给server。摘要盘问中的各个参数,其意义以下:

realm(领域):领域參数是强制的,在全部的盘问中都必须有。它是目的是鉴别SIP消息中的机密。在SIP实际应用中,它通常设置为SIP代理server所负责的域名。

nonce(现时):这是由server规定的数据字符串,在server每次产生一个摘要盘问时,这个參数都是不一样的(与前面所产生的不会雷同)。“现时”一般是由一些数据通过md5杂凑运算构造的。 这种数据通常包含时间标识和server的机密短语。这确保每一个“现时”都有一个有限的生命期(也就是过了一些时间后会失效,并且以后再也不会使用),并且是独一无二的 (即不论什么其他的server都不能产生一个同样的“现时”)。

algorithm(算法):这是用来计算的算法。当前仅仅支持MD5算法。

qop(保护的质量):这个參数规定server支持哪种保护方案。client能够从列表中选择一个。值 auth表示仅仅进行身份查验, auth-int表示进行查验外,另一些完整性保护。须要看更具体的描写叙述,请參阅RFC2617。

案例 :

请求URL: https://postman-echo.com/digest-auth

摘要配置信息如下:用户名密码和上面basic auth一样

Digest username=“postman”, realm=“Users”, nonce=“ni1LiL0O37PRRhofWdCLmwFsnEtH1lew”, uri="/digest-auth", response=“254679099562cf07df9b6f5d8d15db44”, opaque=""

img

执行请求结果如下:

执行请求结果如下:

{
"authenticated": true
}

OAuth 1.0

OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。

扩展资料:

  • OAuth那些事儿
  • OAuth的改变

案例

请求URL如下:请求方式为GET,Add authorization data to设置为:Request Headers

https://postman-echo.com/oauth1

参数配置为:

  • Consumer Key: RKCGzna7bv9YD57c
  • Consumer Secret: D+EdQ-gs$-%@2N

img

发送请求结果如下:

{"status": "pass","message": "OAuth-1.0a signature verification was successful"
}

如果Consumer Secret错误则返回如下结果:

{"status": "fail","message": "HMAC-SHA1 verification failed","base_uri": "https://postman-echo.com/oauth1","normalized_param_string": "oauth_consumer_key=RKCGzna7bv9YD57c&oauth_nonce=9Tp6pr0xQwV&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1612414971&oauth_version=1.0","base_string": "GET&https%3A%2F%2Fpostman-echo.com%2Foauth1&oauth_consumer_key%3DRKCGzna7bv9YD57c%26oauth_nonce%3D9Tp6pr0xQwV%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1612414971%26oauth_version%3D1.0","signing_key": "D%2BEdQ-gs%24-%25%402Nu7&"
}

扩展资料:各个授权协议文档

Hawk Authentication

Hawk Auth是一个HTTP认证方案,使用MAC(Message Authentication Code,消息认证码算法)算法,它提供了对请求进行部分加密验证的认证HTTP请求的方法。hawk方案要求提供一个共享对称密匙在服务器与客户端之间,通常这个共享的凭证在初始TLS(安全传输层协议)保护阶段建立的,或者是从客户端和服务器都可用的其他一些共享机密信息中获得的。

案例

请求URL如下: https://postman-echo.com/auth/hawk

密钥信息如下:

  • Hawk Auth ID: dh37fgj492je
  • Hawk Auth Key: werxhqb98rpaxn39848xrunpaw3489ruxnpa98w4rxn
  • Algorithm: sha256

img

{"message": "Hawk Authentication Successful"}

如果将key改为其他任意的字符则返回如下结果:

{"statusCode": 401,"error": "Unauthorized","message": "Bad mac","attributes": {"error": "Bad mac"}
}


http://chatgpt.dhexx.cn/article/4fPf2lFN.shtml

相关文章

详解 http 鉴权

详解 http 鉴权 【总结分享】10种常用前后端鉴权方法,让你不再迷惘 🌟🌟🌟 前端开发登录鉴权方案完全梳理 🌟🌟🌟 实践出真知,聊聊 HTTP 鉴权那些事 注:此处主要讲的是…

文件服务器鉴权,服务鉴权

使用kmse实现服务的权限校验 通过一个简单的实例说明开发者如何通过kmse进行服务间的权限校验。 一、准备客户端和服务端两个demo 这里演示如何快速实践服务鉴权功能。假如现在有两个微服务 auth-client 和 auth-server,想实现 auth-client 调用 auth-server 时&…

前后端常见的几种鉴权方式

最近在重构公司以前产品的前端代码,摈弃了以前的session-cookie鉴权方式,采用token鉴权,忙里偷闲觉得有必要对几种常见的鉴权方式整理一下。 目前我们常用的鉴权有四种: HTTP Basic Authenticationsession-cookieToken 验证OAuth(开放授权)一.HTTP Basic Authentication 这…

鉴权的4种基本方法

一、基于服务器常出现的问题 Seesions: 每次认证用户发起请求时,服务器需要去创建一个记录来存储信息。当越来越多的用户发请求时,内存的开销也会不断增加。 可扩展性: 由于sessions存放在服务器内存中,伴随而来的是可…

什么是鉴权?一篇文章带你了解postman的多种方式

目录 一、什么是鉴权? 二、postman鉴权方式 一、什么是鉴权? 鉴权也就是身份认证,就是验证您是否有权限从服务器访问或操作相关数据。发送请求时,通常必须包含相应的检验参数以确保请求具有访问权限并返回所需数据。通俗的讲就…

10 分钟带你了解鉴权那些事

前言: 鉴权是自动化测试路上的拦路虎,相信大部分同学都深有体会,今天我们就讲一讲这个鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指是指验证用户是否拥有访问系统的权利。为什么要鉴权:…

常见的鉴权方式简述

一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。 为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非法用户接入网络,被骗取关键信息 二、鉴权方式 Basic Auth basic au…

笔记——什么是鉴权

前言 鉴权是自动化测试路上的拦路虎;故以此记录鉴权到底是怎么回事。 一、什么是鉴权,为什么要鉴权 鉴权:是指验证用户是否有访问系统的权利。为什么要鉴权 :对用户进行鉴权,防止非法用户占用网络资源,非…

ftok()函数解析

ftok 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。 表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 <sys/msg.h> …

ftok()函数的使用

在上一篇文章中&#xff0c;Mayuyu讲述了共享内存的原理以及使用方法。在创建共享内存之前&#xff0c;必须指定一个ID值&#xff0c;而这个ID值通常是通过现在要讲的ftok()函数得到。ftok()函数原型如下 其中参数fname是指定的文件名&#xff0c;这个文件必须是存在的而且可以…

linux ftok函数的使用

ftok API #include <sys/types.h> #include <sys/ipc.h> key_t ftok(const char *pathname, int proj_id); ftok根据路径名&#xff0c;提取文件信息&#xff0c;再根据这些文件信息及project ID合成key&#xff0c;该路径可以随便设置。该路径是必须存在的&#x…

ftok与fork

ftok函数编辑 系统建立IPC通讯 &#xff08; 消息队列、 信号量和 共享内存&#xff09; 时必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 2ftok原型编辑 头文件 #include < sys/types.h> #include <sys/ipc.h> 函数原型&#xff1a; key_t f…

Linux下的ftok()函数

linux ftok&#xff08;&#xff09;函数 - 清清飞扬 - 博客园 (cnblogs.com) 系统建立IPC通讯&#xff08;如消息队列、共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型如下&#xff1a; key_t ftok( char * fname, int i…

Linux中ftok函数介绍

函数原型&#xff1a; *key_t ftok(const char fname, int id); 功能&#xff1a;系统建立IPC通讯&#xff08;如消息队列&#xff0c;共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到 返回值&#xff1a;成功返回一个key_t值&#xf…

linux ftok()

系统建立IPC通讯&#xff08;如消息队列、共享内存时&#xff09;必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型如下&#xff1a; C代码 key_t ftok( char * fname, int id) key_t ftok( char * fname, int id) fname就时你指定的文件名&a…

Linux中ftok函数详解

在ipc通信中 system V 模式的ipc通信中都需要一个key值来生成对应的ID&#xff0c;那么key是如何生成的呢&#xff1f; 通过函数ftok生成 #include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_id);参数&#xff1a; pathname: …

ftok说明

文章一&#xff1a; ftok函数 系统建立IPC通讯&#xff08;消息队列、信号量和共享内存&#xff09;时必须指定一个ID值。通常情况下&#xff0c;该id值通过ftok函数得到。 ftok原型 头文件&#xff1a; #include <sys/types.h> #include <sys/ipc.h> 如下&…

ftok()函数深度解析

关于ftok函数&#xff0c;先不去了解它的作用来先说说为什么要用它&#xff0c;共享内存&#xff0c;消息队列&#xff0c;信号量它们三个都是找一个中间介质&#xff0c;来进行通信的&#xff0c;这种介质多的是。就是怎么区分出来&#xff0c;就像唯一一个身份证来区分人一样…

linux进程间通信--消息队列相关函数(ftok)详解

ftok 消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用System V IPC函数实现的。System V IPC函数名称和说明如下表15-1所示。 表15-1 System V IPC函数 消息队列 信号灯 共享内存区 头文件 <sys/msg.h> &l…

19-逆波兰表达式求值(栈)

逆波兰表达式求值 1.题目描述2. 思路3.代码实现3.1 c实现 4. 复杂度分析 1.题目描述 LeetCode题目链接 逆波兰表达式由波兰的逻辑学家卢卡西维兹提出。逆波兰表达式的特点是&#xff1a;没有括号&#xff0c;运算符总是放在和它相关的操作数之后。因此&#xff0c;逆波兰表达式…