Authentication module help!

Maxim Dounin mdounin at mdounin.ru
Mon Mar 10 23:49:51 UTC 2014


Hello!

On Fri, Mar 07, 2014 at 09:38:42PM -0500, lerouxt wrote:

> Hi, I'm trying to integrate nginx with a proprietary authentication scheme
> and I need a bit of help!
> 
> The auth scheme is this:  traffic is allowed through nginx if there exists a
> cookie containing a valid HMAC.  If not, nginx is to redirect to an auth
> server (same domain) which will  prompt the user for credentials.  Upon
> successful login the auth server will emit a valid HMAC and then redirect
> the user back to nginx which will then validate and do its thing.
> 
> The HMAC validation is proprietary and there exists a C lib to perform the
> task.  I figured writing an nginx module that will exeucte during the access
> phase would do the trick. Trouble is, I can't figure out how to do the
> redirect to the auth server in the case the HMAC is missing or invalid.  Try
> as I might, I just can't get nginx to do a temporary redirect in the access
> phase (i can do this just fine in the content phase!).
> 
> What's the preferred approach for doing this?  Can it be done all in the
> module, or do I need a combination of module + error_page redirection?

A redirect can be returned from an access phase handler as usual, 
by adding appropriate Location header and returning a 
NGX_HTTP_MOVED_TEMPORARILY code:

    r->headers_out.location = ngx_list_push(&r->headers_out.headers);
    if (r->headers_out.location == NULL) {
        return NGX_HTTP_INTERNAL_SERVER_ERROR;
    }

    r->headers_out.location->hash = 1;
    ngx_str_set(&r->headers_out.location->key, "Location");
    ngx_str_set(&r->headers_out.location->value, "http://example.com");

    return NGX_HTTP_MOVED_TEMPORARILY;

-- 
Maxim Dounin
http://nginx.org/



More information about the nginx mailing list