Eu queria ter uma ideia se algo como o seguinte cenário fosse possível:
O Nginx manipula uma solicitação e a encaminha para algum tipo de aplicativo de autenticação em que os cookies e / ou outros tipos de identificadores de segurança são interpretados e verificados. O aplicativo talvez faça algumas adições à solicitação (anexando cabeçalhos autenticados). A falha na autenticação retorna um HTTP 401.
O Nginx pega a solicitação e a encaminha através de um aplicativo de autorização que determina, com base na identidade e no verbo HTTP (colocar, excluir, obter etc.) e URL em questão, se o ator / agente / usuário tem permissão para executou a ação pretendida. Talvez o aplicativo de autorização modifique o pedido de alguma forma, anexando outro cabeçalho, por exemplo. A falha na autorização retorna 403.
(lave, enxague, repita o padrão de proxy para qualquer número de serviços que queira participar da solicitação de alguma forma.)
Por fim, o Nginx encaminha a solicitação para o código real do aplicativo, onde a solicitação é inspecionada e as operações solicitadas são executadas de acordo com a URL em questão e onde a identidade do usuário pode ser capturada e compreendida pelo aplicativo, observando pedido HTTP alterado.
Idealmente, o Nginx poderia fazer isso de forma nativa ou com um plugin. Alguma idéia?
A alternativa que considero é ter o Nginx entregando a solicitação inicial para o aplicativo de autenticação e, em seguida, fazer com que esse aplicativo proxy a solicitação volte para o Nginx (seja na mesma caixa ou em outra caixa).
Eu sei que existem vários frameworks de aplicativos (Django, RoR, etc.) que podem fazer muitas dessas coisas "em processo", mas eu estava tentando tornar as coisas um pouco mais genéricas e auto-contidas onde diferentes aplicativos poderia "enganchar" o pipeline HTTP do Nginx e, em seguida, participar de um curto-circuito e até modificar a solicitação de acordo.
Se o Nginx não puder fazer isso, alguém tem conhecimento de outros servidores da Web que funcionarão da maneira descrita acima?