如何使用Nginx和Microsoft Azure AD进行身份验证?

我需要一个舒适的方式来允许特定用户从AAD到上游应用程序进行身份验证。 我发现了一些信息:

编辑: 也许这是用于nginx的第三方jwt foss模块https://github.com/TeslaGov/ngx-http-auth-jwt-module

编辑2: openresty的lua-resty-openidc看起来很棒,甚至是维护的。 仅缺少Azure示例。

编辑3: 我想知道是否可以使用

AAD-> Keycloak-> Keycloak Proxy-> Nginx(auth_request到keycloak proxy)

是否有任何可靠的替代方案?谢谢

点赞
用户7147666
用户7147666

我不熟悉AAD,但如果您已在您的环境中授权了客户端,则使用Nginx auth request模块委托上游服务的身份验证非常简单,只需使用现有的授权服务器。

在Nginx中的示例指令:

location /upstream/ {
    auth_request /auth;
    ...
}

location = /auth {
    proxy_pass http://your-auth-server:1234;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header X-Authorization $http_authorization;
}

对于每个客户端对/upstream/的请求,Nginx将发出一个内部子请求到/auth,您需要将其代理到您的授权服务器,并传递所需的信息来授权客户端请求。在此示例中,客户端IP和其授权标头。

您的授权服务器完成其工作后,如果要允许访问,则响应http代码200,如果不允许,则为401/403。然后,Nginx根据响应代码允许或拒绝客户端请求。

2018-08-09 16:48:58