C# ASP. NET Core 2.1 Linux NTLM Apache 2.2 - Получить имя пользователя? - PullRequest
2 голосов
/ 29 мая 2020

Мы новички в. NET Core. У нас есть приложение ASP. NET Core 2.1, которое размещено нашей командой системного администратора на сервере Linux с использованием прокси Apache 2.2. Пользователи будут запускать URL-адрес нашего приложения в браузере, и прокси Apache получит запрос и направит его нашему приложению на Linux сервере.

Все работает нормально, и мы можем продолжать разработку и развертывание на наш. Теперь мы начали защищать наше приложение, и наша фирма решила добавить в наше приложение аутентификацию Windows. После того, как команда системного администрирования выполнила свою работу, мы начали получать значения ключей ниже в заголовке запроса.

Мы пытаемся написать код C# в нашем приложении ASP. NET Core 2.1, чтобы получить имя пользователя. Мы считаем, что значение ключа: авторизация, которое зашифровано, будет содержать имя пользователя. Мы пробовали так много способов расшифровать его, но не смогли его расшифровать.

Может кто-нибудь, пожалуйста, помогите и сообщите нам, как получить имя пользователя в этом случае.

Пожалуйста, посмотрите ниже код, который я пытаюсь.

if (!Request.Headers.ContainsKey("Authorization"))
{
    string cookieValue = Request.Headers["Authorization"];
    cookieValue= cookieValue.Substring("NTLM ".Length).Trim();
    UTF8Encoding specialUtf8Encoding = new UTF8Encoding(false, true);

    // below code do not work. How to get plain text ?
    //byte[] protectedBytes = Base64UrlTextEncoder.Decode(cookieValue);
    //string plainText = System.Text.ASCIIEncoding.ASCII.GetString(protectedBytes);
} 

Ниже показано, что мы видим в ключах и значениях заголовка запроса

Key: Cache-Control, Value=max-age=0
Key: Connection, Value=Keep-Alive
Key: Accept, Value=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng
Key: Accept-Encoding, Value=gzip, deflate, br
Key: Accept-Language, Value=en-US,en;q=0.9
Key: Authorization, Value=NTLM TlRMTVNTUAADAAAAGAAYAIAAAABUAVQBmAAAAAwADABYAAAACAAIAGQAAAAUABQAbAAAAAAAAADsAQAABYKIogoA7kIAAAAPNSOWmAbXlPi5fhYGSO54RVAATQBBAF8ATgBCAHAAYwBhAG8AQQBOAFAAWABEAFcAVAAxADYANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhmacrZwRfdlIkhEBBfdWjAQEAAAAAAACNce03PTXWAcU/7pwxmsPkAAAAAAIADABQAE0AQQBfAE4AQgABABAAQQBOAFQAVgBQAFcAUwAxAAQAJgBhAG0AZgAuAHAAYQBjAGkAZgBpAGMAbABpAGYAZQAuAG4A
Key: Cookie, Value=.AspNetCore.Antiforgery.Xf_oDoHBPRA=CfDJ8LQZvjci-adCv0t9XQ2PRfiQ6oFCKJDXb8Xe8d7Gd6wOtJc97d7fVTEUt8xrxjk9XYfqmyeGyO7iLAbWLKRTGPUVo9v2_zoRnCqVSrADnZPhBToSzxuoLf9u2QNcFTvkbYEOaNvphVotB4saPlb_osw
Key: Host, Value=dev.myweb.net:4443
Key: User-Agent, Value=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36
Key: Upgrade-Insecure-Requests, Value=1
Key: Sec-Fetch-Site, Value=none
Key: Sec-Fetch-Mode, Value=navigate
Key: Sec-Fetch-User, Value=?1
Key: Sec-Fetch-Dest, Value=document
Key: site, Value=dev.myweb.net
Key: port, Value=443
Key: X-Forwarded-For, Value=11.123.13.456
Key: X-Forwarded-Host, Value=dev.myweb.net:4443
Key: X-Forwarded-Server, Value=dev.myweb.net

1 Ответ

0 голосов
/ 04 июня 2020

Я всего лишь разработчик, а не системный администратор. После того, как я много прочитал и изучил, я могу решить проблему. Сначала я сузил его до версии сервера Aapche, и все, что я пробовал, было решением Apache 2.4, но наш - Apache 2.2 .

На сервере Apache 2.2 мы привели ниже конфигурация.

   <LocationMatch ^/mylocation>
     AuthName "NTLM Authentication"
     NTLMAuth on
     NTLMAuthHelper "/usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp"
     NTLMBasicAuthoritative on
     NTLMBasicRealm xxx_yy
     AuthType NTLM
     require valid-user
     RewriteCond %{LA-U:REMOTE_USER} (.+)
     RewriteRule . - [E=RU:%1]
     RequestHeader set X-Remote-User %{RU}e

   </LocationMatch>

В нашем приложении C# ASP. NET Core 2.1 мы получаем заголовок HTTP-запроса ниже для вызовов http и https.

    Key: Cache-Control, Value=max-age=0
    Key: Connection, Value=Keep-Alive
    Key: Accept, Value=text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng
    Key: Accept-Encoding, Value=gzip, deflate, br
    Key: Accept-Language, Value=en-US,en;q=0.9
    Key: Authorization, Value=NTLM TlRMTVNTUAADAAAAGAAYAIAAAABUAVQBmAAAAAwADABYAAAACAAIAGQAAAAUABQAbAAAAAAAAADsAQAABYKIogoA7kIAAAAPNSOWmAbXlPi5fhYGSO54RVAATQBBAF8ATgBCAHAAYwBhAG8AQQBOAFAAWABEAFcAVAAxADYANgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAhmacrZwRfdlIkhEBBfdWjAQEAAAAAAACNce03PTXWAcU/7pwxmsPkAAAAAAIADABQAE0AQQBfAE4AQgABABAAQQBOAFQAVgBQAFcAUwAxAAQAJgBhAG0AZgAuAHAAYQBjAGkAZgBpAGMAbABpAGYAZQAuAG4A
    Key: Cookie, Value=.AspNetCore.Antiforgery.Xf_oDoHBPRA=CfDJ8LQZvjci-adCv0t9XQ2PRfiQ6oFCKJDXb8Xe8d7Gd6wOtJc97d7fVTEUt8xrxjk9XYfqmyeGyO7iLAbWLKRTGPUVo9v2_zoRnCqVSrADnZPhBToSzxuoLf9u2QNcFTvkbYEOaNvphVotB4saPlb_osw
    Key: Host, Value=dev.myweb.net:4443
    Key: User-Agent, Value=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36
    Key: Upgrade-Insecure-Requests, Value=1
    Key: Sec-Fetch-Site, Value=none
    Key: Sec-Fetch-Mode, Value=navigate
    Key: Sec-Fetch-User, Value=?1
    Key: Sec-Fetch-Dest, Value=document
    Key: site, Value=dev.myweb.net
    Key: port, Value=443
    Key: X-Forwarded-For, Value=11.123.13.456
    Key: X-Forwarded-Host, Value=dev.myweb.net:4443
    Key: X-Forwarded-Server, Value=dev.myweb.net
    Key: X-Remote-User, Value=xxx_yy\abcdefg
...