当前位置: 首页 > 知识库问答 >
问题:

检查用户是否存在于ASP. NET Core WebAPI JWT身份验证中

华乐逸
2023-03-14

我已经在WebAPI中成功设置了JWT身份验证/授权,但有一个问题:我可以创建一个新的用户帐户,生成它的JWT令牌,然后在令牌仍然有效时删除该帐户。在授权之前,我应该如何以及在哪里检查与令牌关联的用户是否确实存在?

这是我设置JWT的代码(Startup.cs):

var secretKey = Configuration.GetValue<string>("SecretKey");
            var symmetricKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secretKey));

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddJwtBearer(options =>
                {
                    options.TokenValidationParameters = new TokenValidationParameters()
                    {
                        ValidateIssuer = true,
                        ValidateAudience = true,
                        ValidateIssuerSigningKey = true,

                        ValidIssuer = "localhost",
                        ValidAudience = "localhost",
                        IssuerSigningKey = symmetricKey
                    };
                });

我在我的控制器上使用[Authorize]属性,用户ID在JWT令牌中。

提前感谢!

共有1个答案

赫连坚
2023-03-14

您还可以在以下事件中验证用户:

options.Events = new JwtBearerEvents()
{
    OnTokenValidated = context =>
    {
        //get userid if type is "userid"
        var userid = context.Principal.Claims.Where(x => x.Type == "userid").FirstOrDefault().Value;
        if (true )
        {
            context.Fail("invaild token");
        }
        return Task.CompletedTask;
    },

};

如果要在该事件中检查数据库,可以使用依赖项注入来获取db上下文,如:

var dbcontext = context.HttpContext.RequestServices.GetRequiredService<ApplicationDbContext>();
 类似资料:
  • 我正在尝试评估身份验证用户的角色数组。100和102是我要检查的角色值。如果身份验证用户具有其中之一,则返回。这可能吗?以下是我目前的代码: 我不希望一次重复检查一个,因为处理代码太多,会使文件过长。

  • 我正在研究使用JWT身份验证的Spring Security实现。我不确定如何检查用户角色并在方法级别获得经过身份验证的用户。我在网上看到这个例子: 我需要从JWT令牌中提取用户类型吗?还有其他方法可以实现吗?在我看来,仅使用是不完整的。 看起来这段代码是用来获得用户如果使用会话类型,我得到NPE。你知道对于JWT我如何才能成为用户吗? Github完整来源:https://Github.com/

  • 在loadByUserName()方法中,我通过邮件找到用户。目前,我的用户类使用isEnabled()方法实现UserDetails,以检查用户是否已启用。然而,在身份验证之前会检查这个启用标志,这样任何人都可以发现另一个用户的帐户是否启用,无论使用什么密码。有没有办法在身份验证后检查启用标志? 我的用户类: My loadUserByUsername()方法: 我更改了默认消息,以防凭据不良或

  • 于是我在这里看到:https://firebase . Google . com/docs/auth/web/account-linking # link-auth-provider-credentials-to-a-user-account现在可以在Firebase中链接用户账号了。我还看到Firebase提供了匿名认证的功能,它为一个用户创建一个用户会话,不需要任何凭证。 在我们的应用程序中,

  • 在JSP下,在JDBC连接成功之后,并且ResultSet正在显示一些价值。 如何检查用户在文本字段(使用HTML表单)中输入的登录值(用户名和密码)是否正确并存在于数据库中? 编辑:无论是否输入凭据,它都显示不正确的用户名和密码:

  • 我已经实现了keycloak用户存储SPI流。它针对外部源进行身份验证。Keycloak是用外部存储属性更新的,如果它在getUserByUsername方法中更新,它就可以工作。 我正在isValid方法中验证userValidation,并更新UserModel和LocalHashMap中的userAttributes。 从日志中,我看到UserStoreProviderFactory创建了两