我在内部网络内部的HAProxy负载均衡器后面的3个节点上部署了一个微服务。使用OAuth2 APIS授权服务器保护服务。现在,我想将HAProxy移动到DMZ。我想拒绝标头中没有auth令牌的请求,并通过调用OAuth REST API验证auth令牌。
在HAProxy中,我找不到办法做到这一点。有一个option httpchk
可以用于健康检查。我正在寻找可用于验证每个传入请求的类似功能。
任何人都可以帮我建议如何使用HAProxy或Apache mod_proxy来实现这个?
答案 0 :(得分:5)
Apache模块mod_auth_openidc
允许您针对授权服务器验证OAuth 2.0令牌,请参阅:https://github.com/zmartzone/mod_auth_openidc。该模块可以与mod_proxy结合使用,以实现您的目标。
答案 1 :(得分:0)
在 HAProxy 中,我找不到办法做到这一点。
作为记录,从 2021 年开始,您可以。这是关于使用 OAuth https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-2-authentication/ 的 HAProxy 官方博客文章。
TL;DR: 安装 this haproxy-lua-oauth script,然后你就可以想出像这个片段一样的 conf
frontend api_gateway
# Always use HTTPS to protect the secrecy of the token
bind :443 ssl crt /usr/local/etc/haproxy/pem/test.com.pem
# Accept GET requests and skip further checks
http-request allow if { method GET }
# Deny the request if it's missing an Authorization header
http-request deny unless { req.hdr(authorization) -m found }
# Verify the token by invoking the jwtverify Lua script
http-request lua.jwtverify
# Deny the request unless 'authorized' is true
http-request deny unless { var(txn.authorized) -m bool }
# (Optional) Deny the request if it's a POST/DELETE to a
# path beginning with /api/hamsters, but the token doesn't
# include the "write:hamsters" scope
http-request deny if { path_beg /api/hamsters } { method POST DELETE } ! { var(txn.oauth_scopes) -m sub write:hamsters }
# If no problems, send to the apiservers backend
default_backend apiservers