GoogleOAuth2AuthenticationHandler + прекращение SSL - redirect_uri_mismatch - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть приложение, скрытое после HAProxy.

Существует SSL-завершение.Мое приложение - https://myapp.domain.com, но в приложениях HttpContext.Request оно распознается как http://myapp.domain.com (без SSL, поскольку оно прекращается на уровне прокси).

Проблема в том, что я использую библиотеку Microsoft.Owin.Security.Google.Когда он генерирует redirect_uri с http вместо https.

, я проверил реализацию метода GoogleOAuth2AuthenticationHandler => ApplyResponseChallengeAsync () и ясно показывает, что это redirect_uri генерируется из данных на стороне сервера:

    string str1 = this.Request.Scheme + Uri.SchemeDelimiter + (object) this.Request.Host + (object) this.Request.PathBase;
    string str2 = str1 + (object) this.Request.Path + (object) this.Request.QueryString;
    string str3 = str1 + (object) this.Options.CallbackPath;

Вопрос в том, как заставить этого провайдера получить действительную схему URL?

1 Ответ

0 голосов
/ 23 сентября 2019

Я нашел решение своей проблемы. Request.Scheme в этом контексте не HttpRequest , а IOwinRequest .

. Его можно переопределить глобально в файле Startup.cs:

    app.Use((context, next) =>
    {
        context.Request.Scheme = context.Request.GetRealScheme(true);
        return next();
    });

где GetRealScheme () - это мой метод расширения:

    private const string HeaderProtoKey = "X-Forwarded-Proto";

    public static string GetRealScheme(this IOwinRequest request, bool skipPostfix = false)
    {
        if (request == null)
            return null;

        string headerProtocol = request.Headers[HeaderProtoKey] ?? string.Empty;

        string result = headerProtocol.ToLower().Contains("https")
            ? "https://"
            : request.Scheme;

        return skipPostfix
            ? result.Replace("://", string.Empty)
            : result;
    }

Одна важная вещь, на которую следует обратить внимание!

Этот код должен применяться ДО Настройка аутентификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...