在ASP.NET Core中针对Mongodb数据存储区的基于简单令牌的身份验证/授权

silence_coder

我需要实现基本上具有2个角色的非常简单的身份验证机制:OwnersUsers我认为拥有Enum就足够了。应用本身就是SPA,并通过Asp.net核心实现了webapi。我看到了一篇文章-如何使用EF身份来实现它,但是他们的模型看起来比我实际需要的要复杂得多,并且面向SQL db的EF以及我使用mongo。因此,我的用户将如下所示:

class UserModel{
    Id, 
    Token, 
    Roles: ["Owners", "Users"],
    ...
}

那么,我需要实现哪些接口并将其添加到DI才能使用[Authorize]分配[Authorize(Roles="Users")]属性,并且它们根据我发送的标头中的令牌正确运行?

Ph0en1x

让我澄清一下@Adem的答案。您需要以特定方式实现自定义中间件。要实现此目的,需要实现3个抽象类(答案对asp.net core rc2btw是正确的):

Microsoft.AspNetCore.Builder.AuthenticationOptions Microsoft.AspNetCore.Authentication.AuthenticationMiddleware<TOptions> Microsoft.AspNetCore.Authentication.AuthenticationHandler<TOptions>

然后将此中间件添加到您的启动类。

代码示例:

public class TokenOptions : AuthenticationOptions
    {
        public TokenOptions() : base()
        {
            AuthenticationScheme = "Bearer";
            AutomaticAuthenticate = true;
        }
    }

public class AuthMiddleware : AuthenticationMiddleware<TokenOptions>
{
    protected override AuthenticationHandler<TokenOptions> CreateHandler()
    {
       return new AuthHandler(new TokenService());
    }

    public AuthMiddleware(RequestDelegate next, IOptions<TokenOptions> options, ILoggerFactory loggerFactory, UrlEncoder encoder) : base(next, options, loggerFactory, encoder)
    {
    }
}

public class AuthHandler : AuthenticationHandler<TokenOptions>
{
    private ITokenService _tokenService;

    public AuthHandler(ITokenService tokenService)
    {
        _tokenService = tokenService;
    }

    protected override async Task<AuthenticateResult> HandleAuthenticateAsync()
    {
        string token = null;
        AuthenticateResult result = null;
        string token = Helper.GetTokenFromHEader(Request.Headers["Authorization"]);
        // If no token found, no further work possible
        if (string.IsNullOrEmpty(token))
        {
            result = AuthenticateResult.Skip();
        }
        else
        {
            bool isValid = await _tokenService.IsValidAsync(token);
            if (isValid)
            {
                //assigning fake identity, just for illustration
                ClaimsIdentity claimsIdentity = new ClaimsIdentity("Custom");
                var claims = new List<Claim>();
                claims.Add(new Claim(ClaimTypes.Name, "admin"));
                claims.Add(new Claim(ClaimTypes.NameIdentifier, "admin"));
                claims.Add(new Claim(ClaimTypes.Role, "admin"));
                ClaimsPrincipal claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                result =
                    AuthenticateResult.Success(new AuthenticationTicket(claimsPrincipal,
                        new AuthenticationProperties(), Options.AuthenticationScheme));
            }
            else
            {
                result = AuthenticateResult.Skip();
            }
        }

        return result;
    }
}`

ps该代码仅用于说明想法。当然,您将需要实现自己的处理程序。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

来自分类Dev

Asp.Net Core 2 中基于令牌的身份验证

来自分类Dev

ASP.NET Core中的承载令牌身份验证

来自分类Dev

ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

来自分类Dev

使用ASP.NET Web API 2和Owin的基于令牌的身份验证会抛出401未经授权

来自分类Dev

如何在asp.net中检查基于令牌的GET和Post方法的身份验证

来自分类Dev

在Asp.net core / 5中使用策略库进行令牌身份验证

来自分类Dev

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

来自分类Dev

ASP.NET Core中的基本身份验证

来自分类Dev

Azure App Service授权/简单身份验证与ASP.NET Forms身份验证冲突

来自分类Dev

如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

来自分类Dev

使用ASP.NET Identity和ASP.NET Web API 2的基于跨域令牌的身份验证

来自分类Dev

基于令牌的身份验证 - Angular 2 + ASP.NET MVC/WebAPI + C#

来自分类Dev

仅针对特定帐户使用Google进行ASP.NET Core身份验证

来自分类Dev

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

来自分类Dev

使用 Asp.net Core 2.1 和 Identity Server 4 的身份验证/授权

来自分类Dev

使用ASP.net API的承载令牌身份验证

来自分类Dev

在 ASP.NET Core 2 中使用令牌或 Open ID Connect 进行身份验证

来自分类Dev

在.Net Core 3.0项目中正确设置ASP.Net Core授权和身份验证

来自分类Dev

ASP.NET MVC 5中的身份验证和授权

来自分类Dev

ASP.NET 5 MVC 6中没有实体框架的身份验证和授权

来自分类Dev

ASP.NET MVC 5中的身份验证和授权

来自分类Dev

ASP.NET MVC 4中具有ASPNET身份的基于角色的身份验证

来自分类Dev

使用ASP.NET身份验证和LDAP的身份验证/授权

来自分类Dev

ASP.NET MVC中的身份Cookie身份验证

来自分类Dev

Asp.NET Core + ReactJs-存储身份验证信息的正确方法是什么?

来自分类Dev

ASP.Net Core SAML身份验证

来自分类Dev

什么是ASP.NET Core的Microsoft身份验证方案?

来自分类Dev

在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

Related 相关文章

  1. 1

    使用基于ASP.NET身份令牌的身份验证在每个Web Api请求中授权声明

  2. 2

    Asp.Net Core 2 中基于令牌的身份验证

  3. 3

    ASP.NET Core中的承载令牌身份验证

  4. 4

    ASP.NET MVC + API和WCF具有针对自定义数据库和活动目录的基于声明的授权和身份验证

  5. 5

    使用ASP.NET Web API 2和Owin的基于令牌的身份验证会抛出401未经授权

  6. 6

    如何在asp.net中检查基于令牌的GET和Post方法的身份验证

  7. 7

    在Asp.net core / 5中使用策略库进行令牌身份验证

  8. 8

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

  9. 9

    ASP.NET Core中的基本身份验证

  10. 10

    Azure App Service授权/简单身份验证与ASP.NET Forms身份验证冲突

  11. 11

    如何在ASP Net Core 3.1控制器中针对特定操作设置基本身份验证?

  12. 12

    使用ASP.NET Identity和ASP.NET Web API 2的基于跨域令牌的身份验证

  13. 13

    基于令牌的身份验证 - Angular 2 + ASP.NET MVC/WebAPI + C#

  14. 14

    仅针对特定帐户使用Google进行ASP.NET Core身份验证

  15. 15

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

  16. 16

    使用 Asp.net Core 2.1 和 Identity Server 4 的身份验证/授权

  17. 17

    使用ASP.net API的承载令牌身份验证

  18. 18

    在 ASP.NET Core 2 中使用令牌或 Open ID Connect 进行身份验证

  19. 19

    在.Net Core 3.0项目中正确设置ASP.Net Core授权和身份验证

  20. 20

    ASP.NET MVC 5中的身份验证和授权

  21. 21

    ASP.NET 5 MVC 6中没有实体框架的身份验证和授权

  22. 22

    ASP.NET MVC 5中的身份验证和授权

  23. 23

    ASP.NET MVC 4中具有ASPNET身份的基于角色的身份验证

  24. 24

    使用ASP.NET身份验证和LDAP的身份验证/授权

  25. 25

    ASP.NET MVC中的身份Cookie身份验证

  26. 26

    Asp.NET Core + ReactJs-存储身份验证信息的正确方法是什么?

  27. 27

    ASP.Net Core SAML身份验证

  28. 28

    什么是ASP.NET Core的Microsoft身份验证方案?

  29. 29

    在ASP.NET MVC Web API服务和MVC客户端体系结构中实现身份验证和基于角色的授权

热门标签

归档