JWT Validation in HAProxy

被刻印的时光 ゝ 提交于 2019-12-04 05:11:09

As far as I could tell, HAProxy does not have the functionality to perform the logic for validating the JWT. Instead, I implemented a script in Lua for haproxy.cfg to call to perform the validation:

global
    maxconn 256
    lua-load /choose_backend.lua

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80

    http-request set-header X-SSL-Client-DN             %{+Q}[ssl_c_s_dn]


    http-request set-var(txn.backend_name) lua.backend_select()
    use_backend %[var(txn.backend_name)]

backend prod_domain
    balance roundrobin
    server prodDomain1 "${MARATHON_LB_PROD_1}" maxconn 32 check
    server prodDomain2 "${MARATHON_LB_PROD_2}" maxconn 32 check

backend dev_domain
    balance roundrobin
    server devDomain1 "${MARATHON_LB_DEV_1}" maxconn 32 check
    server devDomain2 "${MARATHON_LB_DEV_2}" maxconn 32 check

As the other answer pointed out, you have to use Lua script. You can use existing implementations from lua-resty-jwt or Kong.

Notes:

  • Those code-bases are not concise. A simple copy & paste won't work. So you have to extract the bare minimum you need.
  • You can't have dependencies in your Lua script. Only plain vanilla Lua. So you have to get rid of all require statements.
  • The tricky part is the HMAC implementation.
  • Avoid any I/O operation in your Lua script, e.g. file, database, network operations.

It's not an easy undertaking. Good luck! It's something worth sharing.

HAProxy can act as an API gateway and validate JWT tokens against a public key. They have written a blog post and provided sample code to show you how.

The post is here: https://www.haproxy.com/blog/using-haproxy-as-an-api-gateway-part-2-authentication/

The sample lua code is here: https://github.com/haproxytech/haproxy-lua-jwt

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!