Nginx微服务认证

Nginx微服务认证,nginx,microservices,Nginx,Microservices,在Nginx上构建微服务认证的最佳实践是什么 现在我有了下一个反向代理服务 server { listen 80; listen [::]:80; server_name sspay.local; location /service/passport/ { proxy_pass http://passport-service:3000/; proxy_redirect off; proxy_set_header

在Nginx上构建微服务认证的最佳实践是什么

现在我有了下一个反向代理服务

server {
    listen 80;
    listen [::]:80;

    server_name sspay.local;

    location /service/passport/ {
        proxy_pass http://passport-service:3000/;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $server_name;
    }
}
例如,我想创建“用户服务”,它将提供有关用户的信息。我希望它为普通用户提供当前用户的信息,为管理员提供所有用户的信息

对于此opportunity,passport服务提供包含用户权限信息的JWT令牌

那么我如何在nginx内部创建一个“中间件”,它将向“passport service”发出请求,以检查当前JWT令牌是否有权访问指定的路由(例如“/service/users/{id}”)

使用nginx

然后在Nginx中设置指令,如下所示:

location /service/users/ {
    auth_request /auth;
    ...
}

location = /auth {
    internal;
    proxy_pass http://passport-service:3000/;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Real-Ip $remote_addr;
    proxy_set_header Authorization $http_authorization;
}
现在,只要客户机请求url以/service/users开头,Nginx就会向/auth发出内部子请求,在本例中,会在头中传递客户机IP和授权令牌,但是您可以根据需要对其进行配置

您的身份验证服务器脚本接收子请求,执行您需要执行的任何身份验证,如果您想允许访问,则将其编码为返回HTTP响应代码200,如果您不想,则返回401

这只是一个允许或拒绝访问的基本示例,您可以合并
error\u页面
和/或
auth\u request\u set
指令,以构建更全面的解决方案,将客户端重定向到登录页面、自定义错误页面、非管理员页面等等