File: AuthenticationHandler.cs
Web Access
Project: src\src\Servers\HttpSys\src\Microsoft.AspNetCore.Server.HttpSys.csproj (Microsoft.AspNetCore.Server.HttpSys)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
 
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Http;
 
namespace Microsoft.AspNetCore.Server.HttpSys;
 
internal sealed class AuthenticationHandler : IAuthenticationHandler
{
    private RequestContext? _requestContext;
    private AuthenticationScheme? _scheme;
 
    public Task<AuthenticateResult> AuthenticateAsync()
    {
        var identity = _requestContext!.User?.Identity;
        if (identity != null && identity.IsAuthenticated)
        {
            return Task.FromResult(AuthenticateResult.Success(new AuthenticationTicket(_requestContext.User!, properties: null, authenticationScheme: _scheme!.Name)));
        }
        return Task.FromResult(AuthenticateResult.NoResult());
    }
 
    public Task ChallengeAsync(AuthenticationProperties? properties)
    {
        _requestContext!.Response.StatusCode = 401;
        return Task.CompletedTask;
    }
 
    public Task ForbidAsync(AuthenticationProperties? properties)
    {
        _requestContext!.Response.StatusCode = 403;
        return Task.CompletedTask;
    }
 
    public Task InitializeAsync(AuthenticationScheme scheme, HttpContext context)
    {
        _scheme = scheme;
        _requestContext = context.Features.Get<RequestContext>();
 
        if (_requestContext == null)
        {
            throw new InvalidOperationException("No RequestContext found.");
        }
 
        return Task.CompletedTask;
    }
}