来自 HAProxy 或 Apache 的 OAuth 令牌验证 mod_proxy
OAuth token validation from HAProxy or Apache mod_proxy
我在 3 个节点上部署了一个微服务,这些节点位于内部网络中的 HAProxy 负载均衡器后面。这些服务使用 OAuth2 APIS 授权服务器进行保护。现在,我想将 HAProxy 移动到 DMZ。我想拒绝 header 中没有授权令牌的请求,并通过调用 OAuth REST API.
来验证授权令牌
在 HAProxy 中,我找不到执行此操作的方法。有一个 option httpchk
可用于健康检查。我正在寻找可用于验证每个传入请求的类似功能。
谁能帮我建议如何使用 HAProxy 或 Apache mod_proxy 来实现这个?
Apache 模块 mod_auth_openidc
允许您针对授权服务器验证 OAuth 2.0 令牌,请参阅:https://github.com/zmartzone/mod_auth_openidc。该模块可以与 mod_proxy 结合使用以实现您想要的。
In HAProxy I couldn't find a way to do this.
郑重声明,从 2021 年起您可以。这里有一篇关于使用OAuth https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-2-authentication/.
的HAProxy官方博客post
TL;DR: 安装 this haproxy-lua-oauth script,然后你就可以像这个片段
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
我在 3 个节点上部署了一个微服务,这些节点位于内部网络中的 HAProxy 负载均衡器后面。这些服务使用 OAuth2 APIS 授权服务器进行保护。现在,我想将 HAProxy 移动到 DMZ。我想拒绝 header 中没有授权令牌的请求,并通过调用 OAuth REST API.
来验证授权令牌在 HAProxy 中,我找不到执行此操作的方法。有一个 option httpchk
可用于健康检查。我正在寻找可用于验证每个传入请求的类似功能。
谁能帮我建议如何使用 HAProxy 或 Apache mod_proxy 来实现这个?
Apache 模块 mod_auth_openidc
允许您针对授权服务器验证 OAuth 2.0 令牌,请参阅:https://github.com/zmartzone/mod_auth_openidc。该模块可以与 mod_proxy 结合使用以实现您想要的。
In HAProxy I couldn't find a way to do this.
郑重声明,从 2021 年起您可以。这里有一篇关于使用OAuth https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-2-authentication/.
的HAProxy官方博客postTL;DR: 安装 this haproxy-lua-oauth script,然后你就可以像这个片段
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