在Nginx中增加对OAuth协议的支持的教程

2019-10-17 20:14:03刘景俊

    --include-module-http_gzip_static_module
    --add-mdounin-module=ngx_http_auth_request_module#a29d74804ff1

你可以方便地在seatgeek/homebrew-formulae找到以上信息包。

为Debian定制Nginx

我们通常都会部署到Debian的发行版-通常是Ubuntu上作为我们的产品服务器。如果是这样,那将会非常简单,运行 dpkg -i nginx-custom 安装我们的定制包。这步骤如此简单你一运行它就完成了。

一些在搜索定制debian/ubuntu包时的笔记:

    你可以通过 apt-get source PACKAGE_NAME来获取debian安装包。     Debian安装包受控于一个 rules文件,你需要sed-fu来操作它。     你可以通过编辑 control 文件来更新 deb包的依赖。注意这里指定了一些元依赖(meta-dependency)你不要去删除它,但是这些很容易分辨出来。     新的发布必须要在changelog里注明,否则包有可能不会被升级因为它可能已经被安装过了。你需要在表单里使用 +tag_name来指明哪些是你自己在baseline上新加的改动。我会额外加上一个数字-从0开始-指示出包的发布编号。     大多数的改动可以以某种方式自动更改,但是似乎没有一个简单的命令行工具可以创建定制的发布包。这也正是我们感兴趣的地方,如果你知道什么的话,请给我们给我们提供一些链接,工具或方法。

在运行这个伟大过程的同时,我构建了一个小的批处理脚本来自动化这个过程的主要步骤,你可以在gist on github上找到它。

在我意识到这个过程可以被脚本化之前仅仅花费了90个nginx包的构建时间。

全部OAuth

现在可以测试并部署嵌入Nginx的Lua脚本了,让我们开始Lua编程。

nginx-lua模块提供了一些辅助功能和变量来访问Nginx的绝大多数功能,显然我们可以通过access_by_lua中该模块提供的指令来强制打开OAuth认证。

    当使用*_by_lua_file指令后,必须重载nginx来使其起作用。

我用NodeJS为SeatGeek创建了一个简单的OAuth2提供者类。这部分内容很简单,你也很容易获得你是通用语言的响应版本。

接下来,我们的OAuth API使用JSON来处理令牌(token)、访问级别(access level)和重新认证响应(re-authentication responses)。所以我们需要安装lua-cjson模块。

# install lua-cjson
if [ ! -d lua-cjson-2.1.0 ]; then
    tar zxf lua-cjson-2.1.0.tar.gz
fi
cd lua-cjson-2.1.0
sed 's/i686/x86_64/' /usr/share/lua/5.1/luarocks/config.lua > /usr/share/lua/5.1/luarocks/config.lua-tmp
rm /usr/share/lua/5.1/luarocks/config.lua
mv /usr/share/lua/5.1/luarocks/config.lua-tmp /usr/share/lua/5.1/luarocks/config.lua
luarocks make

我的OAuth提供者类使用了query-string来发送认证的错误信息,我们也需要在我们的Lua脚本中为其提供支持: