ASP.Net Core中的自定义身份验证机制

梅内劳斯·麦斯塔肯(Menelaus Mistaken)

我需要使用登录页面中的外部API对用户进行身份验证。如果从外部API进行的身份验证成功,那么我将在会话中存储AuthToken。

为了检查请求是否有效,我创建了以下授权处理程序

public class ExtApiStoreRequirement : IAuthorizationRequirement
{
}
public class ExtApiAuthorizationHandler : AuthorizationHandler<ExtApiStoreRequirement>
{

    IHttpContextAccessor _accessor;
    public ExtApiAuthorizationHandler(IHttpContextAccessor accessor)
    {
        _accessor = accessor;
    }

    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, ExtApiStoreRequirement requirement)
    {
        var authState = GET_AUTH_FROM_SESSION(_accessor.HttpContext.Session);


        if (authState!=null)
        {
            _accessor.HttpContext.Response.Redirect("/Account/Login");
            //context.Fail(); <-- I removed that because it was responding an empty page
            context.Succeed(requirement);
        }
        else
            context.Succeed(requirement);

        return Task.CompletedTask;
    }
}

而且我已经在我的startup.cs中注册了该处理程序

  services.AddAuthorization(options =>
        {
            options.AddPolicy("ExtApi",
                              policy => policy.Requirements.Add(new ExtApiStoreRequirement()));
        });

这种方法有效,但是我没有信心,因为我必须要求context.Succeed(requirement);重定向才能起作用。如果我打电话,context.Fail()那么将不会发生重定向,而我看到的只是一个空白页。

此方法是否存在任何安全性问题,或者我可以安全使用它?

酷卡格琳

您的实现是为了授权而不是认证。我认为编写自定义身份验证中间件不是创建授权策略,而是适合您的情况的正确方法。

首先查看如何在Mongodb数据存储的asp.net核心中实现基于自定义令牌的简单身份验证/授权

要为您的案例实现上述方式,HandleAuthenticateAsync应如下所示:

protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
{
    AuthenticateResult result = null;
    var principal = GetPrincipalFromSession();
    if(principal != null)
    {
         result = AuthenticateResult.Success(new AuthenticationTicket(principal,
                    new AuthenticationProperties(), Options.AuthenticationScheme));
    }
    else
    {
         result = AuthenticateResult.Skip();
    }
    return result;
}

根据评论更新

protected override async Task<bool> HandleUnauthorizedAsync(ChallengeContext context)
{    
     Response.Redirect(Options.LoginPath);// you need to define LoginPath        
     return true;
}

当用户登录时,您还应该将主体存储在会话中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Asp.Net Core 中实现自定义的 2 因素身份验证机制

来自分类Dev

ASP.NET CORE 中的自定义身份验证和更新声明

来自分类Dev

在ASP.NET Core中使用Authorize属性和自定义Cookie身份验证

来自分类Dev

具有自定义身份验证类型的ASP.NET Core JWT

来自分类Dev

ASP.NET Core 3.1的自定义身份验证处理程序的授权失败?

来自分类Dev

如何在ASP.NET Core(不是旧版本!)中实现自定义UserStore(或自定义身份验证)。

来自分类Dev

如何在ASP.NET Core(不是旧版本!)中实现自定义UserStore(或自定义身份验证)。

来自分类Dev

具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

来自分类Dev

ASP.NET身份-自定义身份验证的步骤

来自分类Dev

ASP.NET身份-自定义身份验证的步骤

来自分类Dev

Azure MobileApp自定义身份验证VS Asp.Net身份

来自分类Dev

如何在ASP.NET Web API 2中自定义对我自己的表集的身份验证?

来自分类Dev

Azure中的ASP.NET Web API:自定义身份验证筛选器以防止暴力破解?

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

asp.net mvc中不同用户类型的自定义身份验证和授权

来自分类Dev

在ASP.NET MVC5中使用自定义登录进行表单身份验证

来自分类Dev

Windows身份验证的ASP.NET 5自定义角色

来自分类Dev

具有自定义身份验证的ASP.NET Web API

来自分类Dev

ASP.NET Identity外部身份验证提供程序自定义图标

来自分类Dev

Asp.net 5 MVC 6自定义身份验证

来自分类Dev

没有存储的ASP.NET自定义身份验证

来自分类Dev

带有OWIN的ASP.NET Web Api-自定义身份验证

来自分类Dev

Asp.net 5 MVC 6自定义身份验证

来自分类Dev

自定义ASP.NET MVC表单身份验证

来自分类Dev

ASP.NET MVC - 自定义身份验证不起作用

来自分类Dev

在asp.net核心中要求经过身份验证的用户,但在某些操作中需要自定义策略,需要自定义策略

来自分类Dev

具有IdentityServer4,Asp.Net Core身份和不带实体框架的自定义提供程序的Blazor WebAssembly身份验证

来自分类Dev

如何使用Angular个人用户帐户身份验证自定义ASP.NET Core Web应用程序的登录页面?

来自分类Dev

.Net Core 3.1自定义身份验证

Related 相关文章

  1. 1

    在 Asp.Net Core 中实现自定义的 2 因素身份验证机制

  2. 2

    ASP.NET CORE 中的自定义身份验证和更新声明

  3. 3

    在ASP.NET Core中使用Authorize属性和自定义Cookie身份验证

  4. 4

    具有自定义身份验证类型的ASP.NET Core JWT

  5. 5

    ASP.NET Core 3.1的自定义身份验证处理程序的授权失败?

  6. 6

    如何在ASP.NET Core(不是旧版本!)中实现自定义UserStore(或自定义身份验证)。

  7. 7

    如何在ASP.NET Core(不是旧版本!)中实现自定义UserStore(或自定义身份验证)。

  8. 8

    具有基于自定义角色的授权的ASP.Net Core 3.0 Windows身份验证

  9. 9

    ASP.NET身份-自定义身份验证的步骤

  10. 10

    ASP.NET身份-自定义身份验证的步骤

  11. 11

    Azure MobileApp自定义身份验证VS Asp.Net身份

  12. 12

    如何在ASP.NET Web API 2中自定义对我自己的表集的身份验证?

  13. 13

    Azure中的ASP.NET Web API:自定义身份验证筛选器以防止暴力破解?

  14. 14

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  15. 15

    asp.net mvc中不同用户类型的自定义身份验证和授权

  16. 16

    在ASP.NET MVC5中使用自定义登录进行表单身份验证

  17. 17

    Windows身份验证的ASP.NET 5自定义角色

  18. 18

    具有自定义身份验证的ASP.NET Web API

  19. 19

    ASP.NET Identity外部身份验证提供程序自定义图标

  20. 20

    Asp.net 5 MVC 6自定义身份验证

  21. 21

    没有存储的ASP.NET自定义身份验证

  22. 22

    带有OWIN的ASP.NET Web Api-自定义身份验证

  23. 23

    Asp.net 5 MVC 6自定义身份验证

  24. 24

    自定义ASP.NET MVC表单身份验证

  25. 25

    ASP.NET MVC - 自定义身份验证不起作用

  26. 26

    在asp.net核心中要求经过身份验证的用户,但在某些操作中需要自定义策略,需要自定义策略

  27. 27

    具有IdentityServer4,Asp.Net Core身份和不带实体框架的自定义提供程序的Blazor WebAssembly身份验证

  28. 28

    如何使用Angular个人用户帐户身份验证自定义ASP.NET Core Web应用程序的登录页面?

  29. 29

    .Net Core 3.1自定义身份验证

热门标签

归档