Nginx 的 token 认证是基于集成了 nginx+lua 的 openresty 来实现的.

  • 环境: centos 7
  • 部署方式: 增量部署(不影响原 nginx 版本)
  • 版本: openresty/1.13.6.2
  • 启动命令:1.原版本通过nginx命令启动.

    2.新版本通过openresty命令启动.

需求:

对指定域名增加 http 请求头(header)验证,

请求头为 xxxx=xxxxx 形式.

如果验证不通过,返回 403 ‘请求头验证失败 或 Error request forbidden ’

实际代码示列:

  server {
listen 80;
server_name www.aaa.com;
access_log logs/host.access.log main;
location /a/b/c {
access_by_lua '
local args = ngx.req.get_headers(); --获取请求中 header 头的列表.
local token1 = args["appid"]; --取出 header 头中key为 appid 的值.
local token2 = "123456"; --定义一个局部变量.
local errs = "oh,Only Authorized Request will be Processe" --定义错误提示消息
if not token1 then
ngx.status = ngx.HTTP_FORBIDDEN --返回错误码
ngx.say(errs) --返回错误消息
ngx.exit(200) -- 跟以上两个连用,固定写法
end if token1 ~= token2 then
ngx.status = ngx.HTTP_FORBIDDEN
ngx.say(errs)
ngx.exit(200)
else
return
end
';
proxy_pass http://www.google.com;
}
}

实施过程中的坑:

背景介绍:

1.我是拷贝的原 nginx 下的配置文件,原 nginx 版本为 1.12.2.

2.测试环境为 openresty 中的nginx,版本为 1.13.6.2

我以为配置文件是通用的,虽然原版本 nginx 的配置文件在新版本中不兼容的部分,我都替换了,但还是产生了奇怪的问题...

  • 测试环境通过,生产环境无论怎么修改配置都无法通过,中间浪费了很多时间,最后基于新 nginx 配置文件重写了整个配置,解决了问题.

致谢:

openresty 最佳实践

Nginx 使用 Lua 模块校验 Token

用lua扩展你的Nginx(写的非常好)

nginx 状态码

基于nginx的token认证的更多相关文章

  1. token 与 基于JWT的Token认证

    支持跨域访问,无状态认证 token特点 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的,前提是传输的用户认证信息通过HTTP头传输 无状态(也称:服务端可扩展行): ...

  2. 基于JWT的Token认证机制及安全问题

    [干货分享]基于JWT的Token认证机制及安全问题 https://bbs.huaweicloud.com/blogs/06607ea7b53211e7b8317ca23e93a891

  3. iOS 开发之基于JWT的Token认证机制及解析

    在移动端和服务端通信中,一般有两种认证方式:token 和 session. 1.session/cookie 认证机制: 在服务端创建一个Session对象,同时在客户端的浏览器端创建一个Cooki ...

  4. 简单说说基于JWT的token认证方式

    一.什么是认证 好多人不知道什么是认证,认证,其实就是服务端确认用户身份.Http协议是无状态的,客户端发送一条请求,服务端返回一条响应,二者就算做成一单买卖,一拍两散.在很久以前,互联网所能提供的服 ...

  5. 基于JWT的token认证机制

    1. 一个JWT实际上就是一个字符串,由三部分组成 头部,载荷,签名 头部:事描述类型,签名,算法等 可以被表示成一个JSON对象 载荷:存放有效信息的地方 包含三个部分 (1)标准注册中的声明-建议 ...

  6. Java实现基于token认证

    随着互联网的不断发展,技术的迭代也非常之快.我们的用户认证也从刚开始的用户名密码转变到基于cookie的session认证,然而到了今天,这种认证已经不能满足与我们的业务需求了(分布式,微服务).我们 ...

  7. JWT的优点和实现Token认证的安全问题

    JWT的优点和实现Token认证的安全问题 一.什么是JWT JWT——Json web token  是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应 ...

  8. 基于token与基于服务器的身份认证

    1.基于服务器的身份认证 我们清楚 http 协议是无状态的,也就是说,如果我们已经认证了一个用户,那么他下一次请求的时候,服务器不知道我是谁,我们就必须要再次认证. 我们与浏览器交互时,比如说登陆成 ...

  9. laravel5.7 前后端分离开发 实现基于API请求的token认证

    最近在学习前后端分离开发,发现 在laravel中实现前后台分离是无法无法使用 CSRF Token 认证的.因为 web 请求的用户认证是通过Session和客户端Cookie的实现的,而前后端分离 ...

随机推荐

  1. Lidgren.Network – an introduction to networking in C# games

    Lidgren.Network – an introduction to networking in C# games http://genericgamedev.com/tutorials/lidg ...

  2. CocoSourcesCS 3

    CocoSourcesCS 3 /*---------------------------------------------------------------------- Compiler Ge ...

  3. SQL多表连接查询(具体实例)

    本文主要列举两张和三张表来讲述多表连接查询. 新建两张表: 表1:student  截图例如以下: 表2:course  截图例如以下: (此时这样建表仅仅是为了演示连接SQL语句.当然实际开发中我们 ...

  4. Nginx + FastCGI 程序(C/C++)搭建高性能web service的demo

    http://blog.csdn.net/chdhust/article/details/42645313 Nginx + FastCGI 程序(C/C++)搭建高性能web service的Demo ...

  5. vue1.0 的过滤器

    vue1.0  自带的过滤器: 一 .过滤器写法 {{ message | Filter}} 二. Vue自带的过滤器:capitalize 功能:首字母大写 <!DOCTYPE html> ...

  6. Hadoop的改进实验(中文分词词频统计及英文词频统计)(4/4)

    声明: 1)本文由我bitpeach原创撰写,转载时请注明出处,侵权必究. 2)本小实验工作环境为Windows系统下的百度云(联网),和Ubuntu系统的hadoop1-2-1(自己提前配好).如不 ...

  7. dmesg 时间转换脚本

    https://linuxaria.com/article/how-to-make-dmesg-timestamp-human-readable perl脚本 #!/usr/bin/perl use ...

  8. hibernate 多对多单向

    多对多会利用中间表做外键的形式关联   package com.bjsxt.hibernate; import javax.persistence.Entity; import javax.persi ...

  9. 【TP3.2】Call to a member function display() on a non-object问题的解决

    Call to a member function display() on a non-object问题的解决

  10. Mybatis准备

    http://www.mybatis.org/mybatis-3/zh/index.html