Basic认证原理

1 Basic auth认证

看到这种标准协议呀,第一反应是肯定有很难看RFC 标准文档,在MDN网站上找到HTTP Authentication机制的文档:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication

1.1 HTTP 认证方式

“Basic” HTTP 验证方案是在 RFC 7617中规定的,使用用户的 ID/密码作为凭证信息,并且使用 base64 算法进行编码。

简单来说,就是在http请求头中增加Authorization的Basic认证字段;

其中basic 后面的字段即为 用户ID:密码 base64编码后的值

  • id:admin

  • password:public

为例进行认证:

GET http://192.168.0.105:8081/api/v4 HTTP/1.1
Authorization:Basic YWRtaW46cHVibGlj

其中,YWRtaW46cHVibGlj就是admin:password编码后的字符串

1.2 如何计算Base64编码

let email = "admin"
let password = "public"
let auth = `${email}:${password}`
const buf = Buffer.from(auth, 'ascii');
console.info(buf.toString('base64'));


//输出信息
YWRtaW46cHVibGlj

2 nodejs服务端中解Basic auth认证

2.1 basic-auth模块

如果在express 这种框架中使用可以直接引用 const basicAuth = require(‘basic-auth’) 模块。 调用即可拿到想要的值: const credentials = basicAuth(req);

const basicAuth = require('basic-auth')

app.post('/token', (req, res) => {
  console.info(req.headers.authorization);
  const credentials = basicAuth(req);
  console.info(credentials);

  res.end();
});

//Basic YWRtaW46cHVibGlj
//Credentials {name: "admin", pass: "public"}

2.2 自行解析

这个逻辑很简单也可以随手解开

 console.info(req.headers.authorization);
 const buf = Buffer.from(req.headers.authorization.substring(req.headers.authorization.indexOf(' ')+1), 'base64');
 const authString = buf.toString('ascii');
 const basicauth = authString.split(':');
 console.info(basicauth);

//Basic YWRtaW46cHVibGlj
//Array(2) ["admin", "public"]
学习更多知识,加QQ群:1098090823
威武网 » Basic认证原理

提供最优质的资源集合

立即查看 了解详情