相关疑难解决方法(0)

ASP.NET Core 2.0身份验证中间件

随着Core 1.1遵循@ blowdart的建议并实施了自定义中间件:

/sf/answers/2202565921/

它的工作方式如下:

  1. 中间件运行了.从请求标头中选取一个令牌.
  2. 验证了令牌,如果有效,则构建一个包含多个声明的身份(ClaimsIdentity),然后通过HttpContext.User.AddIdentity()添加;
  3. 在使用services.AddAuthorization的ConfigureServices中,我添加了一个策略来要求中间件提供的声明.
  4. 在控制器/操作中,我将使用[授权(角色="中间件添加的某些角色")]

这有点适用于2.0,除了如果令牌无效(上面的步骤2)并且从未添加声明我得到"没有指定authenticationScheme,并且没有找到DefaultChallengeScheme."

所以现在我正在读取2.0中的auth更改:

https://docs.microsoft.com/en-us/aspnet/core/migration/1x-to-2x/identity-2x

在ASP.NET Core 2.0中我做同样的事情的正确途径是什么?我没有看到做真正的自定义身份验证的示例.

c# authentication asp.net-core asp.net-core-2.0

84
推荐指数
2
解决办法
5万
查看次数

使用cookie身份验证的ASP.NET Core 2.0自定义中间件

我需要为我的公司实施自定义"身份验证".我在引号中说这是因为用户在技术上在它到达应用程序之前进行了身份验证,如果是这样,userId将存在于请求标头中.

我需要做的是找出一种方法来查询数据库并根据该Id获取其他用户信息,并设置HttpContext.User对象,以便在应用程序中轻松使用它.

我现在采取的路线涉及使用没有ASP.NET核心身份的Cookie身份验证.我已将该想法与将为用户查询数据库的自定义中间件相结合,从db字段填充声明,并使用context.SignInAsync创建cookie.我把这个中间件放在app.UseAuthentication()之前.问题是在第一次请求时没有设置.User对象,因为看起来SignIn方法只创建cookie但不设置.User对象.身份验证中间件尚未看到cookie,因为它在第一次请求时不存在.

谁能提供任何想法?也许我错了,或者这种技术很好,但是我错过了我需要做的工作.

在Startup.cs中:

public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();


        services.AddAuthentication("MyAuthenticationCookie")
           .AddCookie("MyAuthenticationCookie");
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseBrowserLink();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }

        app.UseStaticFiles();

        app.UseMyUserMiddleware();

        app.UseAuthentication();

        app.UseMvc(routes =>
        {
            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
Run Code Online (Sandbox Code Playgroud)

自定义中间件:

    public class MyUserMiddleware
{
    private readonly RequestDelegate _next;

    public MyUserMiddleware(RequestDelegate next)
    {
        _next = next;
    }

    public Task Invoke(HttpContext context)
    {
        // Sign in user if this auth cookie doesn't exist
        if (context.Request.Cookies[".AspNetCore.MyAuthenticationCookie"] == null) …
Run Code Online (Sandbox Code Playgroud)

authentication cookies asp.net-core asp.net-core-middleware

4
推荐指数
1
解决办法
4476
查看次数