1
resposta

Não consigo gerar o token

Eu segui o projeto igual o das aulas, no entanto a minha requisição para geração do token sempre retorna não autorizado.

Segue o código da minha classe LoginController:

using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; using System.Linq; using System.Security.Claims; using System.Threading.Tasks; using Alura.ListaLeitura.Seguranca; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.IdentityModel.Tokens;

namespace Alura.ListaLeitura.Services {

[ApiController]
[Route("api/[controller]")]
public class LoginController : ControllerBase
{
    private readonly SignInManager<Usuario> _signInManager;

    public LoginController(SignInManager<Usuario> signInManager)
    {
        _signInManager = signInManager;
    }

    [HttpPost]
    public async Task<IActionResult> Token(LoginModel model)
    {
        if (ModelState.IsValid)
        {
            var result = await _signInManager.PasswordSignInAsync(model.Login, model.Password, true, true);

            if (result.Succeeded)
            {
                //cria token (header + payload >> direitos + signature)
                var direitos = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Sub, model.Login),
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
                };

                var chave = new SymmetricSecurityKey(System.Text.Encoding.UTF8.GetBytes("alura-webapi-authentication-valid"));
                var credenciais = new SigningCredentials(chave, SecurityAlgorithms.HmacSha256);

                var token = new JwtSecurityToken(
                    issuer: "Alura.WebApp",
                    audience: "Postman",
                    claims: direitos,
                    signingCredentials: credenciais,
                    expires: DateTime.Now.AddMinutes(30)
                );

                var tokenString = new JwtSecurityTokenHandler().WriteToken(token);
                return Ok(tokenString);
            }
            return Unauthorized(); //401
        }
        return BadRequest(); //400
    }
}

}

1 resposta

Olá, eu segui o passo a passo e também tive problemas, mas descobri que o problema era na classe do startup.

De uma olhada para verificar se existem essas duas linhas no seu codigo na parte do configure do startup.cs

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            ...
            app.UseAuthentication();
            app.UseAuthorization();
            ...
        }