Как правильно настроить аутентификацию AspNet Core 2 за балансировщиком нагрузки? - PullRequest
0 голосов
/ 10 июля 2019

Я успешно установил аутентификацию AspNet Core 2, но теперь хотел бы, чтобы она работала за балансировщиком нагрузки.

Поскольку адрес балансировщика нагрузки отличается от адреса моего приложения, я меняю Uri перенаправления в своем файле startup.cs ConfigureServices, как это ...

options.Events.OnRedirectToIdentityProvider = async n =>
     {                        
        n.ProtocolMessage.RedirectUri = "https://frontfacingaddress.com";
        await Task.FromResult(0);
     };

Это работает нормально, и я успешно аутентифицируюсь, и обратный вызов с сервера идентификации вызывает https://frontfacingaddress.com/signin-oidc. Это правильно обработано, и обработка OnTokenResponseReceived показывает, что я успешно получил токен.

Проблема в том, что он затем делает еще один вызов на сервере идентификации, но на этот раз на фактический (не с балансировкой нагрузки) адрес приложения. Когда это возвращается, он выдает ошибку: Файл cookie AspNetCore.Correlation.OpenIdConnect не найден.

Итак, след Fiddler выглядит так:

302 HTTPS  frontfacingaddress.com   /account/signin
200 HTTPS  identity.serveraddress.com /connect/authorize/callback etc...
302 HTTPS  frontfacingaddress.com   /signin-oidc
-- this is where I successfully receive the code, but then:
302 HTTPS  actualwebaddress.com     /account/signin
200 HTTPS  identity.serveraddress.com /connect/authorize/callback etc...
400 HTTPS  frontfacingaddress.com   /signin-oidc
-- this is the 400 cookie not found error

Почему после успешной аутентификации он снова запускается с фактического адреса и дает сбой?

1 Ответ

0 голосов
/ 11 июля 2019

Решением было модифицировать ReturnUri, чтобы он использовал фронтальный адрес при получении билета:

options.Events.OnTicketReceived = async context =>
{
    var host = context.HttpContext.Request.Host.Host;
    var forwardedHost = context.HttpContext.Request.Headers["X-Forwarded-Host"].ToString();
    context.ReturnUri = context.ReturnUri.Replace(host, forwardedHost);                        
    await Task.FromResult(0);
};
...