通过 nginx-lua 给 Nginx 增加 OAuth 支持

本文介绍了如何通过Nginx的Lua中间件添加OAuth2认证和授权层,以解决多系统认证的问题。文章详细阐述了在OSX和Debian上构建支持Lua的Nginx,以及如何编写和部署Lua脚本来处理OAuth验证,最终实现在Nginx中统一管理认证的过程。
摘要由CSDN通过智能技术生成

前言:我们使用Nginx的Lua中间件建立了OAuth2认证和授权层。如果你也有此打算,阅读下面的文档,实现自动化并获得收益。
SeatGeek 在过去几年中取得了发展,我们已经积累了不少针对各种任务的不同管理接口。我们通常为新的展示需求创建新模块,比如我们自己的博客、图表等。我们还定期开发内部工具来处理诸如部署、可视化操作及事件处理等事务。在处理这些事务中,我们使用了几个不同的接口来认证:

 

  • Github/Google Oauth
  • 我们SeatGeek内部的用户系统
  • 基本认证
  • 硬编码登录

 

显然,实际应用中很不规范。多个认证系统使得难以对用于访问级别和通用许可的各种数据库进行抽象。

 

单系统认证

 

我们也做了一些关于如何设置将解决我们问题的研究。这促使了Odin的出现,它在验证谷歌应用的用户方面工作的很好。不幸的是它需要使用Apache,而我们已和Nginx结为连理并把它作为我们的后端应用的前端。
幸运的是,我看了mixlr的博客并引用了他们Lua在Nginx上的应用:

 

  • 修改响应头
  • 重写内部请求
  • 选择性地基于IP拒绝主机访问

 

最后一条看起来很有趣。它开启了软件包管理的地狱之旅。

 

构建支持Lua的Nginx

 

Lua for Nginx没有被包含在Nginx的核心中,我们经常要为OSX构建Nginx用于开发测试,为Linux构建用于部署。

 

为OSX定制Nginx

 

对于OSX系统,我推荐使用Homebrew进行包管理。它初始的Nginx安装包启用的模块不多,这有非常好的理由:

 

关键在于NGINX有着如此之多的选项,如果把它们都加入初始包那一定是疯了,如果我们只把其中一些加入其中就会迫使我们把所有都加入,这会让我们疯掉的。
--- Charlie Sharpsteen, @sharpie

 

所以我们需要自己构建。合理地构建Nginx可以方便我们以后继续扩展。幸运的是,使用Homebrew进行包管理十分方便快捷。
我们首先需要一个工作空间:

 

cd ~
mkdir -p src
cd src

 

之后,我们需要找到初始安装信息包。你可以通过下面任何一种方式得到它:

 

 

此时如果我们执行 brew install ./nginx.rb 命令, 它会依据其中的信息安装Nginx。既然现在我们要完全定制Nginx,我们要重命名信息包,这样之后通过 brew update 命令进行更新的时候就不会覆盖我们自定义的了:

 

mv nginx.rb nginx-custom.rb
cat nginx-custom.rb | sed 's/class Nginx/class NginxCustom/' >> tmp
rm nginx-custom.rb
mv tmp nginx-custom.rb

 

我们现在可以将我们需要的模块加入安装信息包中并开始编译了。这很简单,我们只要将所有我们需要的模块以参数形式传给 brew install 命令,代码如下:

 

# Collects arguments from ARGV
def collect_modules regex=nil
    ARGV.select { |arg| arg.match(regex) != nil }.collect { |arg| arg.gsub(regex, '') }
end

# Get nginx modules that are not compiled in by default specified in ARGV
def nginx_modules; collect_modules(/^--include-module-/); end

# Get nginx modules that are available on github specified in ARGV
def add_from_github; collect_modules(/^--add-github-module=/); end

# Get nginx modules from mdounin's hg repository specified in ARGV
def add_from_mdounin; collect_modules(/^--add-mdounin-module=/); end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值