Пример #1
0
 public TokenBuilderService(IHttpContextAccessor httpContextAccessor, ITokenConfiguration tokenConfiguration, ISigningConfiguration signingConfiguration, ICacheRepository cacheRepository)
 {
     _httpContextAccessor  = httpContextAccessor ?? throw new ArgumentNullException(nameof(httpContextAccessor));
     _tokenConfiguration   = tokenConfiguration ?? throw new ArgumentNullException(nameof(tokenConfiguration));
     _signingConfiguration = signingConfiguration ?? throw new ArgumentNullException(nameof(signingConfiguration));
     _cacheRepository      = cacheRepository ?? throw new ArgumentNullException(nameof(cacheRepository));
 }
Пример #2
0
        public static IServiceCollection ResolveToken(this IServiceCollection services)
        {
            services.ResolveTokenConfigurations();

            var provider = services.BuildServiceProvider();

            ITokenConfiguration   token   = provider.GetService <ITokenConfiguration>();
            ISigningConfiguration signing = provider.GetService <ISigningConfiguration>();

            services.AddAuthentication
            (
                authOptions =>
            {
                authOptions.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                authOptions.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }
            )
            .AddJwtBearer
            (
                bearerOptions =>
            {
                var paramsValidation = bearerOptions.TokenValidationParameters;

                paramsValidation.IssuerSigningKey = signing.SigningCredentials.Key;
                paramsValidation.ValidAudience    = token.Audience;
                paramsValidation.ValidIssuer      = token.Issuer;

                // Valida a assinatura de um token recebido
                paramsValidation.ValidateIssuerSigningKey = true;

                // Verifica se um token recebido ainda é válido
                paramsValidation.ValidateLifetime = true;

                // Tempo de tolerância para a expiração de um token (utilizado caso haja problemas de sincronismo
                //de horário entre diferentes computadores envolvidos no processo de comunicação)
                paramsValidation.ClockSkew = TimeSpan.Zero;
            }
            );

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

            return(services);
        }
Пример #3
0
 public TokenEncoder(ITokenConfiguration tokenConfiguration, ISigningConfiguration signingConfiguration)
 {
     _tokenConfiguration   = tokenConfiguration;
     _signingConfiguration = signingConfiguration;
 }