zoukankan      html  css  js  c++  java
  • 5.0AuthenticationMiddleware&AuthAppBuilderExtensions

    IApplicationBuilder->IAuthenticationSchemeProvider->IAuthenticationHandlerProvider
    using System;
    using Microsoft.AspNetCore.Authentication;
    
    namespace Microsoft.AspNetCore.Builder
    {
        /// <summary>
        /// Extension methods to add authentication capabilities to an HTTP application pipeline.
        /// </summary>
        public static class AuthAppBuilderExtensions
        {
            /// <summary>
            /// Adds the <see cref="AuthenticationMiddleware"/> to the specified <see cref="IApplicationBuilder"/>, which enables authentication capabilities.
            /// </summary>
            /// <param name="app">The <see cref="IApplicationBuilder"/> to add the middleware to.</param>
            /// <returns>A reference to this instance after the operation has completed.</returns>
            public static IApplicationBuilder UseAuthentication(this IApplicationBuilder app)
            {
                if (app == null)
                {
                    throw new ArgumentNullException(nameof(app));
                }
    
                return app.UseMiddleware<AuthenticationMiddleware>();
            }
        }
    }
    using System;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.Http.Features.Authentication;
    using Microsoft.Extensions.DependencyInjection;
    
    namespace Microsoft.AspNetCore.Authentication
    {
        /// <summary>
        /// Middleware that performs authentication.
        /// </summary>
        public class AuthenticationMiddleware
        {
            private readonly RequestDelegate _next;
    
            /// <summary>
            /// Initializes a new instance of <see cref="AuthenticationMiddleware"/>.
            /// </summary>
            /// <param name="next">The next item in the middleware pipeline.</param>
            /// <param name="schemes">The <see cref="IAuthenticationSchemeProvider"/>.</param>
            public AuthenticationMiddleware(RequestDelegate next, IAuthenticationSchemeProvider schemes)
            {
                if (next == null)
                {
                    throw new ArgumentNullException(nameof(next));
                }
                if (schemes == null)
                {
                    throw new ArgumentNullException(nameof(schemes));
                }
    
                _next = next;
                Schemes = schemes;
            }
    
            /// <summary>
            /// Gets or sets the <see cref="IAuthenticationSchemeProvider"/>.
            /// </summary>
            public IAuthenticationSchemeProvider Schemes { get; set; }
    
            /// <summary>
            /// Invokes the middleware performing authentication.
            /// </summary>
            /// <param name="context">The <see cref="HttpContext"/>.</param>
            public async Task Invoke(HttpContext context)
            {
                context.Features.Set<IAuthenticationFeature>(new AuthenticationFeature
                {
                    OriginalPath = context.Request.Path,
                    OriginalPathBase = context.Request.PathBase
                });
    
                // Give any IAuthenticationRequestHandler schemes a chance to handle the request
                var handlers = context.RequestServices.GetRequiredService<IAuthenticationHandlerProvider>();
                foreach (var scheme in await Schemes.GetRequestHandlerSchemesAsync())
                {
                    var handler = await handlers.GetHandlerAsync(context, scheme.Name) as IAuthenticationRequestHandler;
                    if (handler != null && await handler.HandleRequestAsync())
                    {
                        return;
                    }
                }
    
                var defaultAuthenticate = await Schemes.GetDefaultAuthenticateSchemeAsync();
                if (defaultAuthenticate != null)
                {
                    var result = await context.AuthenticateAsync(defaultAuthenticate.Name);
                    if (result?.Principal != null)
                    {
                        context.User = result.Principal;
                    }
                    if (result?.Succeeded ?? false)
                    {
                        var authFeatures = new AuthenticationFeatures(result);
                        context.Features.Set<IHttpAuthenticationFeature>(authFeatures);
                        context.Features.Set<IAuthenticateResultFeature>(authFeatures);
                    }
                }
    
                await _next(context);
            }
        }
    }
  • 相关阅读:
    【liunx】使用xshell连接虚拟机上的CentOS 7,使用xhell连接本地虚拟机上的Ubuntu, 获取本地虚拟机中CentOS 7的IP地址,获取本地虚拟机中Ubuntu 的IP地址,linux查看和开启22端口
    eclipse启动tomcat, http://localhost:8080无法访问
    java合并PDF,itext.jar
    关于给springboot添加定时器的两种方式
    HttpClient post提交数据,汉字转码
    java 中文与unicode互转
    微信公众号里的图片下载并显示
    根据url下载图片和页面
    java获取指定日期之前或之后的时间
    java计算文件大小
  • 原文地址:https://www.cnblogs.com/htlp/p/15257163.html
Copyright © 2011-2022 走看看