.NET Core Middleware: как получить доступ к учетным данным запроса? - PullRequest
0 голосов
/ 08 декабря 2018

Для тестирования я отправляю запрос с учетными данными, используя

WebRequest request = WebRequest.Create("url");
request.Credentials = new NetworkCredential("user", "pass");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();

Затем перехватываю их в другом приложении, используя промежуточное ПО .NET Core

public async Task Invoke(HttpContext context)

Доступ к запросу в context.Request успешно, но я до сих пор ищу, где внутри context?

можно найти учетные данные или есть другие способы?

1 Ответ

0 голосов
/ 12 декабря 2018

Вы должны сделать что-то похожее на то, что описано здесь .Учетные данные закодированы в заголовке авторизации.

bool isAuthenticated;
var base64Header = Request.Headers["Authorization"];
//The header is a string in the form of "Basic [base64 encoded username:password]"
if (base64Header != null)
{
    var authHeader = AuthenticationHeaderValue.Parse(base64Header);
    if (authHeader != null
        && authHeader.Scheme.Equals("basic", StringComparison.OrdinalIgnoreCase)
        && authHeader.Parameter != null)
    {
        //Decode the username:password pair
        var credentialPair = Encoding.ASCII.GetString(Convert.FromBase64string(authHeader.Parameter));

        //Split into pieces
        var credentials = credentialPair.Split(new [] {":"}, StringSplitOptions.None);
        var userName = credentials[0];
        var plainTextPassword = credentials[1];
        isAuthenticated = SomeAuthenticator.Authenticate(userName, password);
    }
}
if (isAuthenticated)
   return Foo();
else
   RedirectResult("your login view");
...