private static bool TryProcessResult(IBasicAuthenticationResult result, IDictionary <string, object> environment, out int errorStatusCode, out string errorMessage) { IBasicAuthenticationError error; if (result != null) { error = result.ErrorResult; if (error != null) { errorStatusCode = (int)error.StatusCode; errorMessage = error.Message; return(false); } else if (error == null && result.Principal != null) { environment["server.User"] = result.Principal; } } else { error = null; } errorStatusCode = 0; errorMessage = null; return(true); }
/// <summary></summary> /// <param name="environment"></param> /// <returns></returns> public async Task Invoke(IDictionary <string, object> environment) { OwinRequest request = new OwinRequest(environment); OwinResponse response = new OwinResponse(environment); CancellationToken cancellationToken = request.CallCancelled; AuthenticationHeaderValue authorization; string authorizationHeaderError; if (!TryParseAuthorizationHeader(request, out authorization, out authorizationHeaderError)) { response.StatusCode = 400; cancellationToken.ThrowIfCancellationRequested(); await WriteMessage(authorizationHeaderError, response, cancellationToken); return; } cancellationToken.ThrowIfCancellationRequested(); IBasicAuthenticationResult result = await AuthenticateAsync(authorization, cancellationToken); int errorStatusCode; string errorMessage; if (!TryProcessResult(result, environment, out errorStatusCode, out errorMessage)) { response.StatusCode = errorStatusCode; cancellationToken.ThrowIfCancellationRequested(); await AddChallengeOnUnauthorizedAsync(response, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); await WriteMessage(errorMessage, response, cancellationToken); return; } cancellationToken.ThrowIfCancellationRequested(); AuthenticationHeaderValue challenge = await _protocol.CreateChallengeAsync(cancellationToken); if (!TryRegisterOnSendingHeaders(challenge, request, response, out errorMessage)) { response.StatusCode = 500; cancellationToken.ThrowIfCancellationRequested(); await WriteMessage(errorMessage, response, cancellationToken); return; } cancellationToken.ThrowIfCancellationRequested(); await _next(environment); }
private static bool TryProcessResult(IBasicAuthenticationResult result, IDictionary<string, object> environment, out int errorStatusCode, out string errorMessage) { IBasicAuthenticationError error; if (result != null) { error = result.ErrorResult; if (error != null) { errorStatusCode = (int)error.StatusCode; errorMessage = error.Message; return false; } else if (error == null && result.Principal != null) { environment["server.User"] = result.Principal; } } else { error = null; } errorStatusCode = 0; errorMessage = null; return true; }