/** * A solução criada para autenticação é fake, pois considera um usuário admin:admin estático. * A configuração de uma solução para autenticar um usuário em um bano de dados deve mapear a classe "UsuarioFake" * e adaptadar o médodo "UsuarioExiste". Além disso, é importante ressaltar que a solução em JWT, * incluindo a assinatura criptografada foi inspirada na proposta de * Renato Groffe (https://github.com/renatogroffe/ASPNETCore2_JWT) * **/ public static void ConfigurarAutenticacao(this IServiceCollection services) { // Instanciando configurações de segurança (token e criptografia). ConfiguracoesDeSegurancaSingleton configuracoesDeSeguranca = ConfiguracoesDeSegurancaSingleton.getInstance(); services.AddSingleton(configuracoesDeSeguranca); // Configurando autenticação JWT com Bearer. services.AddAuthentication(authOptions => { authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme; authOptions.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme; }).AddJwtBearer(bearerOptions => { var paramsValidation = bearerOptions.TokenValidationParameters; paramsValidation.IssuerSigningKey = configuracoesDeSeguranca.SecurityKey; paramsValidation.ValidAudience = configuracoesDeSeguranca.TokenAudience; paramsValidation.ValidIssuer = configuracoesDeSeguranca.TokenIssuer; paramsValidation.ValidateIssuerSigningKey = true; paramsValidation.ValidateLifetime = true; }); // Ativando verificação de token em requisições. services.AddAuthorization(autorizacao => { autorizacao.AddPolicy("Bearer", new AuthorizationPolicyBuilder() .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser().Build()); }); }
public Object Login( [FromBody] UsuarioFake usuario, [FromServices] ConfiguracoesDeSegurancaSingleton configuracoesDeSeguranca) { UsuarioFake usuarioFake; if (usuario == null || String.IsNullOrWhiteSpace(usuario.Nome) || String.IsNullOrWhiteSpace(usuario.Senha)) { return(enviarBadRequest()); } usuarioFake = UsuarioFake.UsuarioExiste(usuario); if (usuarioFake == null) { return(enviarUnauthorized()); } // Fachada que implementa a geração de tokens com base nas configurações de segurança e no usuário logado. return(new { token = TokenFacade.GerarToken(configuracoesDeSeguranca, usuario) }); }