request authorization with grpc (failure status code)

bmacphee nginx-forum at forum.nginx.org
Tue Jul 2 15:19:54 UTC 2019


I have an nginx configuration that passes gRPC API requests to other
services an authorization endpoint that is used in conjunction.

This works great when authorization is successful (my HTTP1 authorization
endpoint returns HTTP 2xx status codes).

When authorization fails (it returns 401), the gRPC connection initiated by
the client receives a gRPC Cancelled(1) status code, rather than what would
be ideal for the client - an Unauthorized (16) status code.  The status
message appears to be populated by nginx indicating the 401 failure.

Is there a way to control the status code returned to the gRPC channel
during failed auth?

I tried and failed at doing this with the below configuration.  Any non-200
code returned by the auth failure handling results in the same cancelled
status code even after trying to set the status code manually.  If I
override the return with a 200 series code, it treats authorization as
successful (which it also bad).

server {
  location /some_grpc_api {

    grpc_pass grpc://internal_service:50051;
    grpc_set_header x-grpc-user $auth_resp_x_grpc_user;
  }

  # send all requests to the `/validate` endpoint for authorization
  auth_request /validate;
  auth_request_set $auth_resp_x_grpc_user $upstream_http_x_grpc_user;

  location = /validate {
    proxy_pass http://auth:5000;

    # the auth service acts only on the request headers
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;

    # attempt to customize grpc error code
    proxy_intercept_errors on;
    error_page 401 /grpc_auth_fail_page;
  }

  # attempt to customize grpc error code
  location = /grpc_auth_fail_page {
    internal;
    grpc_set_header grpc-status 16;
    grpc_set_header grpc-message "Unauthorized";
    return 401;
  }
}

Posted at Nginx Forum: https://forum.nginx.org/read.php?2,284718,284718#msg-284718



More information about the nginx mailing list