身份验证令牌始终返回未授权

时间:2020-04-11 19:36:59

标签: c# asp.net-mvc rest

我目前正在尝试使用承载令牌,无论我做什么,都会收到HTTP 401未经授权的错误。

我在JWT实现上遵循guide,我有一个处理JWT的扩展方法。

public static class AuthenticationExtension 
{
    public static IServiceCollection AddTokenAuthentication(this IServiceCollection services, IConfiguration config) 
    {
        var secret = config.GetSection("JwtConfig").GetSection("secret").Value;

        var key = Encoding.ASCII.GetBytes(secret);

        services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(key),
                    ValidateIssuer = false, 
                    ValidateAudience = false,
                    // ValidIssuer = "localhost",
                    //ValidAudience = "localhost"
                };
        });

        return services;
    }
}

此外,以下是令牌控制器生成令牌对象的方法,例如,我应该从标头而不是电子邮件和密码中获取值。

如果在代码中找不到该代码,则将其替换。

var  token = jwt.GenerateSecurityToken("fake@email.com"); 

在我的StartUp.cs中,我只是简单地将中间件添加到我的配置中。在服务部分,我进行测试

  services.AddTokenAuthentication(Configuration);

但是,正如您所见,我收到未经授权的HTTP 401返回。

enter image description here

这是api /令牌控制器中的代码。

[Route("api/[controller]")]
[ApiController]
public class TokenController : ControllerBase
{
    private IConfiguration _config;

    public TokenController(IConfiguration config)
    {
        _config = config;
    }

    [HttpGet]
    public string GetRandomToken()
    {
        var jwt = new JwtService(_config);
        var token = jwt.GenerateSecurityToken("fake@email.com");
        return token;
    }
}

来自api /令牌的令牌

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZha2VAZW1haWwuY29tIiwibmJmIjoxNTg2NjMzMTkwLCJleHAiOjE1ODY3MTk1OTAsImlhdCI6MTU4NjYzMzE5MH0.SPSErcPpD4f48sWFYQFVUBmTaVtCW8oDw4Np6Tncozo

这是我的appSettings.json配置,一旦完成此设置,我当然会更改秘密。

这足以保护api,还是应该在api层上使用客户端ID和密码。 HMAC样式。

"JwtConfig": {
    "secret": "PDv7DrqznYL6nv7DrqzjnQYO9JxIsWdcjnQYL6nu0f",
    "expirationInMinutes": 1440   
},

0 个答案:

没有答案