Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 无重定向的承载令牌WEB API asp.net核心_Authentication_Asp.net Core_Jwt_Bearer Token_Asp.net Core Webapi - Fatal编程技术网

Authentication 无重定向的承载令牌WEB API asp.net核心

Authentication 无重定向的承载令牌WEB API asp.net核心,authentication,asp.net-core,jwt,bearer-token,asp.net-core-webapi,Authentication,Asp.net Core,Jwt,Bearer Token,Asp.net Core Webapi,我是asp.net核心的新手。我正在尝试使用jwt身份验证和来自Google、Facebook等的OpenOauth制作一个小型web服务 我读过这篇文章: 这篇文章是关于在ASP.Net core中使用jwt进行身份验证,但是,我还想验证该用户在我的系统中是禁用的还是活动的 My db有一个包含4列的表:Id、名称、密码、状态(0-禁用| 1-激活) 我怎样才能实现我的目标 有人能帮我吗 p/S:我在google上搜索了asp.net中关于jwt的完整教程,但几乎没有。非常感谢验证流的完整源

我是asp.net核心的新手。我正在尝试使用jwt身份验证和来自Google、Facebook等的OpenOauth制作一个小型web服务

我读过这篇文章:

这篇文章是关于在ASP.Net core中使用jwt进行身份验证,但是,我还想验证该用户在我的系统中是禁用的还是活动的

My db有一个包含4列的表:Id、名称、密码、状态(0-禁用| 1-激活)

我怎样才能实现我的目标

有人能帮我吗


p/S:我在google上搜索了asp.net中关于jwt的完整教程,但几乎没有。非常感谢验证流的完整源代码。

我测试了三种方法(它们都有效,但我不知道哪种方法是正确的)

首先是使用
OnTokenValidated
事件:

 OnTokenValidated = async (ctx) =>
 {
       if(user is disabled)
       {
           ctx.Response.Headers.Append(
                        HeaderNames.WWWAuthenticate,
                        ctx.Options.Challenge);
           ctx.SkipToNextMiddleware();
       }
 }
二是在jwt中间件之后使用
Use
方法:

        app.Use(async (context, next) =>
        {
            var auth = await context.Authentication.AuthenticateAsync("Bearer");
            if (auth.Identity.IsAuthenticated && user is disabled)
            {
                context.Response.Headers.Append(
                      HeaderNames.WWWAuthenticate,
                      "Bearer");
            }
            await next();
        });
最后是使用
SecurityTokenValidators

public class CustomSecurityTokenValidator  : JwtSecurityTokenHandler
{
    public CustomSecurityTokenValidator()
    {
    }

    public override ClaimsPrincipal ValidateToken(string securityToken,
        TokenValidationParameters validationParameters, out SecurityToken validatedToken)
    {
        var principal = base.ValidateToken(securityToken, validationParameters, out validatedToken);
        if(user is disabled)
        {
            throw new SecurityTokenNotYetValidException();
        }
        else
        {
            return principal;
        }
    }
}

..... in Startup.cs ...........
var options = new JwtBearerOptions()
{
     //....
}
options.SecurityTokenValidators.Clear();
options.SecurityTokenValidators.Add(new CustomTokenValidator());
app.UseJwtBearerAuthentication(options);