コード例 #1
0
        /// <summary>
        /// Registrar os servicos referentes a autenticacao da aplicacao
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        public static void Registrar(IServiceCollection services, IConfiguration configuration)
        {
            _configuracaoToken = new ConfiguracaoToken();

            new ConfigureFromConfigurationOptions <ConfiguracaoToken>(
                configuration.GetSection(nameof(ConfiguracaoToken)))
            .Configure(_configuracaoToken);

            services.AddSingleton(_configuracaoToken);

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(bearrerOptions =>
            {
                var parametrosValidacao = bearrerOptions.TokenValidationParameters;
                parametrosValidacao.ValidateIssuerSigningKey = true;
                parametrosValidacao.ValidateLifetime         = true;
                parametrosValidacao.ValidateActor            = true;
                parametrosValidacao.ValidateAudience         = true;
                parametrosValidacao.ValidAudience            = _configuracaoToken.Audience;
                parametrosValidacao.ValidIssuer = _configuracaoToken.Issuer;
                parametrosValidacao.ClockSkew   = TimeSpan.Zero;

                parametrosValidacao.IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_configuracaoToken.SigningKey));
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());
            });
            services.AddMemoryCache();
        }
コード例 #2
0
        public IActionResult Post([FromBody] VisaoModeloUsuario usuario,
                                  [FromServices] SegurancaJWT signingConfigurations,
                                  [FromServices] ConfiguracaoToken tokenConfigurations)
        {
            try
            {
                _autorizarUsuarioVisaoModelo.ValidarUsuarioAutorizado(usuario.Login, usuario.Senha);

                return(Ok(GetToken(usuario, signingConfigurations, tokenConfigurations)));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
        }
コード例 #3
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddCors();
            services.AddSingleton <string>(Configuration.GetConnectionString("LiteDB"));
            services.AddSingleton(typeof(CrudService <>), typeof(CrudService <>));
            services.AddTransient <UsuarioService>();
            services.AddTransient <EventoService>();


            var configuracaoAcesso = new ConfiguracaoAcesso();

            services.AddSingleton(configuracaoAcesso);

            var configuracaoToken = new ConfiguracaoToken();


            new ConfigureFromConfigurationOptions <ConfiguracaoToken>
                (Configuration.GetSection("ConfiguracaoToken")).Configure(configuracaoToken);

            services.AddSingleton(configuracaoToken);

            services.AddAuthentication(opcoes =>
            {
                opcoes.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opcoes.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearer =>
            {
                var parametrosValidacao = bearer.TokenValidationParameters;
                parametrosValidacao.IssuerSigningKey = configuracaoAcesso.Key;
                parametrosValidacao.ValidAudience    = configuracaoToken.Audience;
                parametrosValidacao.ValidIssuer      = configuracaoToken.Issuer;

                parametrosValidacao.ValidateIssuerSigningKey = true;
                parametrosValidacao.ValidateLifetime         = true;

                parametrosValidacao.ClockSkew = TimeSpan.Zero;
            });


            services.AddAuthorization(auth => {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
                               .RequireAuthenticatedUser().Build());
            });

            Database.Configuration.Configure(Configuration.GetConnectionString("LiteDB"));
        }
コード例 #4
0
        protected object GetToken([FromBody] VisaoModeloUsuario usuario,
                                  [FromServices] SegurancaJWT signingConfigurations,
                                  [FromServices] ConfiguracaoToken tokenConfigurations)
        {
            try
            {
                ClaimsIdentity identity = new ClaimsIdentity(
                    new GenericIdentity(usuario.Login, "login"),
                    new[] {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                    new Claim(JwtRegisteredClaimNames.UniqueName, usuario.Login)
                }
                    );


                DateTime dataCriacao   = DateTime.Now;
                DateTime dataExpiracao = dataCriacao +
                                         TimeSpan.FromMinutes(tokenConfigurations.Seconds);

                var handler = new JwtSecurityTokenHandler();

                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer             = tokenConfigurations.Issuer,
                    Audience           = tokenConfigurations.Audience,
                    SigningCredentials = signingConfigurations.SigningCredentials,
                    Subject            = identity,
                    NotBefore          = dataCriacao,
                    Expires            = dataExpiracao
                });

                var token = handler.WriteToken(securityToken);


                return(new
                {
                    authenticated = true,
                    created = dataCriacao.ToString("yyyy-MM-dd HH:mm:ss"),
                    expiration = dataExpiracao.ToString("yyyy-MM-dd HH:mm:ss"),
                    accessToken = token
                });
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
コード例 #5
0
        private static void RegistrarChavesAppSettings(IServiceCollection service, IConfiguration configuration)
        {
            _configuracaoConexao = new ConfiguracaoConexao();

            var conexaoConfig = configuration.GetSection(ConfiguracaoConexao);

            new ConfigureFromConfigurationOptions <ConfiguracaoConexao>(conexaoConfig).Configure(_configuracaoConexao);

            service.AddSingleton(_configuracaoConexao);

            _configuracaoToken = new ConfiguracaoToken();

            var configuracaoToken = configuration.GetSection(ConfiguracaoToken);

            new ConfigureFromConfigurationOptions <ConfiguracaoToken>(configuracaoToken).Configure(_configuracaoToken);

            service.AddSingleton(_configuracaoToken);
        }
コード例 #6
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Latest);

            services.AddDbContext <ContextDb>(options =>
                                              options.UseSqlServer(Configuration.GetSection("ConnectionDevelopment").Value));

            services.AddIdentity <UsuarioAplicativo, IdentityRole>()
            .AddEntityFrameworkStores <ContextDb>()
            .AddDefaultTokenProviders();

            var configuracoesAssinatura = new ConfiguracoesAssinatura();

            services.AddSingleton(configuracoesAssinatura);

            var tokenConfigurations = new ConfiguracaoToken();

            new ConfigureFromConfigurationOptions <ConfiguracaoToken>(
                Configuration.GetSection("ConfiguracaoToken"))
            .Configure(tokenConfigurations);
            services.AddSingleton(tokenConfigurations);

            services.AddAuthentication(authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(bearerOptions =>
            {
                var paramsValidation = bearerOptions.TokenValidationParameters;
                paramsValidation.IssuerSigningKey = configuracoesAssinatura.Key;
                paramsValidation.ValidAudience    = tokenConfigurations.Audience;
                paramsValidation.ValidIssuer      = tokenConfigurations.Issuer;

                paramsValidation.ValidateIssuerSigningKey = true;

                paramsValidation.ValidateLifetime = true;

                paramsValidation.ClockSkew = TimeSpan.Zero;
            });

            services.AddAuthorization(auth =>
            {
                auth.AddPolicy("Bearer", new AuthorizationPolicyBuilder()
                               .AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme‌​)
                               .RequireAuthenticatedUser().Build());
            });

            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Info
                {
                    Title   = "PalmSoft Swagger",
                    Version = "v1",
                });
                c.AddSecurityDefinition("Bearer", new ApiKeyScheme
                {
                    Description = "Utilizar a autenticação para geração do token em Token/Get e adicionar a chave conforme exemplo Example: Bearer {chave gerada pelo endpoint token/get}",
                    Name        = "Authorization",
                    In          = "header",
                    Type        = "apiKey"
                });
                c.AddSecurityRequirement(new Dictionary <string, IEnumerable <string> >
                {
                    {
                        "Bearer", Enumerable.Empty <string>()
                    }
                });


                var xmlFile = Path.ChangeExtension(typeof(Startup).Assembly.Location, ".xml");
                c.IncludeXmlComments(xmlFile);
            });

            services.AddMvc();
        }
コード例 #7
0
 public UsuarioController(UsuarioService servico, ConfiguracaoToken configToken, ConfiguracaoAcesso configAcesso) : base(servico)
 {
     ConnectionString = servico.ConnectionString;
     Token            = configToken;
     Acesso           = configAcesso;
 }
コード例 #8
0
        public object Post([FromBody] Usuario usuario, [FromServices] UserManager <UsuarioAplicativo> userManager,
                           [FromServices] SignInManager <UsuarioAplicativo> signInManager,
                           [FromServices] ConfiguracoesAssinatura signingConfigurations,
                           [FromServices] ConfiguracaoToken tokenConfigurations)
        {
            bool credenciaisValidas = false;

            if (usuario != null && !String.IsNullOrWhiteSpace(usuario.Email))
            {
                var userIdentity = userManager.FindByNameAsync(usuario.Email).Result;

                if (userIdentity != null)
                {
                    var resultadoLogin = signInManager.CheckPasswordSignInAsync(userIdentity, usuario.Senha, false).Result;

                    if (resultadoLogin.Succeeded)
                    {
                        credenciaisValidas = userManager.IsInRoleAsync(userIdentity, Funcoes.Role_Fotos).Result;
                    }
                }
            }

            if (credenciaisValidas)
            {
                ClaimsIdentity identity = new ClaimsIdentity(
                    new GenericIdentity(usuario.Email, "Login"),
                    new[] {
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString("N")),
                    new Claim(JwtRegisteredClaimNames.UniqueName, usuario.Email)
                }
                    );

                DateTime dataCriacao   = DateTime.Now;
                DateTime dataExpiracao = dataCriacao +
                                         TimeSpan.FromSeconds(tokenConfigurations.Seconds);

                var handler       = new JwtSecurityTokenHandler();
                var securityToken = handler.CreateToken(new SecurityTokenDescriptor
                {
                    Issuer             = tokenConfigurations.Issuer,
                    Audience           = tokenConfigurations.Audience,
                    SigningCredentials = signingConfigurations.SigningCredentials,
                    Subject            = identity,
                    NotBefore          = dataCriacao,
                    Expires            = dataExpiracao
                });
                var token = handler.WriteToken(securityToken);

                return(new
                {
                    authenticated = true,
                    created = dataCriacao.ToString("yyyy-MM-dd HH:mm:ss"),
                    expiration = dataExpiracao.ToString("yyyy-MM-dd HH:mm:ss"),
                    accessToken = token,
                    message = "OK"
                });
            }
            else
            {
                return(new
                {
                    authenticated = false,
                    message = "Falha ao autenticar"
                });
            }
        }