/// <summary>
 /// Agrega la cabecera con los datos de la carga útil necesarios para el servicio Aspen.
 /// </summary>
 /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
 /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
 /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
 public override void AddSigninPayloadHeader(
     IRestRequest request,
     IJwtEncoder jwtEncoder,
     string apiSecret)
 {
     this.AddPayloadHeader(request);
 }
Пример #2
0
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para autenticar a un usuario en el servicio Aspen.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        /// <param name="userIdentity">La información que se utiliza para autenticar la solicitud en función de un usuario.</param>
        public void AddSigninPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret,
            IUserIdentity userIdentity)
        {
            Throw.IfNull(request, nameof(request));
            Throw.IfNull(jwtEncoder, nameof(jwtEncoder));
            Throw.IfNullOrEmpty(apiSecret, nameof(apiSecret));
            Throw.IfNull(userIdentity, nameof(userIdentity));

            IDeviceInfo deviceInfo = userIdentity.Device ??
                                     CacheStore.Get <DeviceInfo>(CacheKeys.CurrentDevice) ??
                                     DeviceInfo.Current;

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.DeviceInfoHeaderName, deviceInfo.ToJson());
            CacheStore.Add(CacheKeys.CurrentDevice, deviceInfo);

            Dictionary <string, object> payload = new Dictionary <string, object>();

            ServiceLocator.Instance.PayloadClaimsManager.AddNonceClaim(payload, ServiceLocator.Instance.NonceGenerator.GetNonce());
            ServiceLocator.Instance.PayloadClaimsManager.AddEpochClaim(payload, ServiceLocator.Instance.EpochGenerator.GetSeconds());
            ServiceLocator.Instance.PayloadClaimsManager.AddDocTypeClaim(payload, userIdentity.DocType);
            ServiceLocator.Instance.PayloadClaimsManager.AddDocNumberClaim(payload, userIdentity.DocNumber);
            ServiceLocator.Instance.PayloadClaimsManager.AddPasswordClaim(payload, userIdentity.Password);
            ServiceLocator.Instance.PayloadClaimsManager.AddDeviceIdClaim(payload, deviceInfo.DeviceId);
            string jwt = jwtEncoder.Encode(payload, apiSecret);

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.PayloadHeaderName, jwt);
        }
Пример #3
0
        public GestorDeToken()
        {
            IJwtValidator validator = new JwtValidator(serializer, provider);

            this.decoder = new JwtDecoder(serializer, validator, urlEncoder);
            this.encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
        }
Пример #4
0
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para autenticar a un usuario en el servicio Aspen.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        /// <param name="token">El token de autenticación emitido para el usuario.</param>
        /// <param name="username">La identificación del usuario autenticado.</param>
        /// <param name="device">La información asociada con el dispositivo del usuario.</param>
        public void AddSignedPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret,
            string token,
            string username,
            IDeviceInfo device = null)
        {
            Throw.IfNull(request, nameof(request));
            Throw.IfNull(jwtEncoder, nameof(jwtEncoder));
            Throw.IfNullOrEmpty(apiSecret, nameof(apiSecret));
            Throw.IfNullOrEmpty(token, nameof(token));
            Throw.IfNullOrEmpty(username, nameof(username));

            IDeviceInfo deviceInfo = device ?? CacheStore.Get <DeviceInfo>(CacheKeys.CurrentDevice) ?? DeviceInfo.Current;
            Dictionary <string, object> payload = new Dictionary <string, object>();

            ServiceLocator.Instance.PayloadClaimsManager.AddNonceClaim(payload, ServiceLocator.Instance.NonceGenerator.GetNonce());
            ServiceLocator.Instance.PayloadClaimsManager.AddEpochClaim(payload, ServiceLocator.Instance.EpochGenerator.GetSeconds());
            ServiceLocator.Instance.PayloadClaimsManager.AddTokenClaim(payload, token);
            ServiceLocator.Instance.PayloadClaimsManager.AddUsernameClaim(payload, username);
            ServiceLocator.Instance.PayloadClaimsManager.AddDeviceIdClaim(payload, deviceInfo.DeviceId);
            string jwt = jwtEncoder.Encode(payload, apiSecret);

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.PayloadHeaderName, jwt);
        }
Пример #5
0
 public TokenMaker()
 {
     algorithm  = new HMACSHA256Algorithm();
     serializer = new JsonNetSerializer();
     urlEncoder = new JwtBase64UrlEncoder();
     encoder    = new JwtEncoder(algorithm, serializer, urlEncoder);
 }
Пример #6
0
 public TokenIssuer()
 {
     _algorithm     = new HMACSHA256Algorithm();
     _serializer    = new JsonNetSerializer();
     _base64Encoder = new JwtBase64UrlEncoder();
     _jwtEncoder    = new JwtEncoder(_algorithm, _serializer, _base64Encoder);
 }
Пример #7
0
        public JWTWorker()
        {
            IJwtAlgorithm     algorithm  = new HMACSHA256Algorithm(); // symmetric
            IJsonSerializer   serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();

            Encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
        }
 /// <summary>
 /// Agrega la cabecera con el payload requerido por el servicio Aspen.
 /// </summary>
 /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
 /// <param name="encoder">The encoder.</param>
 /// <param name="payload">Diccionario que contiene los datos del payload.</param>
 /// <param name="identity">Instancia de <see cref="IIdentityProvider" /> que proporciona la información de autenticación.</param>
 public virtual void AddPayloadHeader(IRestRequest request, IJwtEncoder encoder, IDictionary <string, object> payload, IIdentityProvider identity)
 {
     Throw.IfNull(request, nameof(request));
     Throw.IfNull(encoder, nameof(encoder));
     Throw.IfNull(payload, nameof(payload));
     Throw.IfNull(identity, nameof(identity));
     this.AddPayloadHeader(request, encoder.Encode(payload, identity.ApiSecret));
 }
Пример #9
0
 public Token(Dictionary <string, object> Payload)
 {
     this.Payload        = Payload;
     EncriptionAlgorithm = new HMACSHA256Algorithm();
     JSONSerializer      = new JsonNetSerializer();
     URLEncoder          = new JwtBase64UrlEncoder();
     JWTEncoder          = new JwtEncoder(EncriptionAlgorithm, JSONSerializer, URLEncoder);
 }
Пример #10
0
 public TokenIssuer()
 {
     // JWT specific initialization.
     // https://github.com/jwt-dotnet/jwt
     _algorithm     = new HMACSHA256Algorithm();
     _serializer    = new JsonNetSerializer();
     _base64Encoder = new JwtBase64UrlEncoder();
     _jwtEncoder    = new JwtEncoder(_algorithm, _serializer, _base64Encoder);
 }
Пример #11
0
 public SecurityService(IApplicationSettings appSettings, ILoginReader loginReader, IPasswordService passwordService, IJwtEncoder encoder, IJwtDecoder decoder, ITokenGenerator tokenGenerator)
 {
     _key             = appSettings.GetValue("API:Key");
     _decoder         = decoder;
     _encoder         = encoder;
     _exp             = int.Parse(appSettings.GetValue("Token:ExpHrs"));
     _loginReader     = loginReader;
     _tokenGenerator  = tokenGenerator;
     _passwordService = passwordService;
 }
Пример #12
0
        public AuthService(AuthOptions options)
        {
            _options = options ?? throw new ArgumentNullException(nameof(options));
            _logger  = Log.Logger.ForContext(GetType());
            var jwtSerializer = new JsonNetSerializer();
            var jwtValidator  = new JwtValidator(jwtSerializer, new UtcDateTimeProvider());
            var jwtUrlEncoder = new JwtBase64UrlEncoder();

            _jwtEncoder = new JwtEncoder(new HMACSHA256Algorithm(), jwtSerializer, jwtUrlEncoder);
            _jwtDecoder = new JwtDecoder(jwtSerializer, jwtValidator, jwtUrlEncoder);
        }
Пример #13
0
        void init()
        {
            urlEncoder = new JwtBase64UrlEncoder();
            serializer = new JsonNetSerializer();
            algorithm  = new HMACSHA256Algorithm();
            encoder    = new JwtEncoder(algorithm, serializer, urlEncoder);

            provider  = new UtcDateTimeProvider();
            validator = new JwtValidator(serializer, provider);
            decoder   = new JwtDecoder(serializer, validator, urlEncoder);
        }
Пример #14
0
 public JWTHelper()
 {
     //非fluent写法
     this._jsonSerializer   = new JsonNetSerializer();
     this._dateTimeProvider = new UtcDateTimeProvider();
     this._jwtValidator     = new JwtValidator(_jsonSerializer, _dateTimeProvider);
     this._base64UrlEncoder = new JwtBase64UrlEncoder();
     this._jwtAlgorithm     = new HMACSHA256Algorithm();
     this._jwtDecoder       = new JwtDecoder(_jsonSerializer, _jwtValidator, _base64UrlEncoder);
     this._jwtEncoder       = new JwtEncoder(_jwtAlgorithm, _jsonSerializer, _base64UrlEncoder);
 }
Пример #15
0
 public JwtObjectEncoder(JwtSecretOptions jwtSecretOptions)
 {
     secret     = jwtSecretOptions.Secret;
     algorithm  = new HMACSHA256Algorithm();
     serializer = new JsonNetSerializer();
     urlEncoder = new JwtBase64UrlEncoder();
     provider   = new UtcDateTimeProvider();
     validator  = new JwtValidator(serializer, provider);
     encoder    = new JwtEncoder(algorithm, serializer, urlEncoder);
     decoder    = new JwtDecoder(serializer, validator, urlEncoder);
 }
Пример #16
0
        public JwTToken()
        {
            IJwtAlgorithm     algorithm        = new HMACSHA512Algorithm();
            IJsonSerializer   serializer       = new JsonNetSerializer();
            IDateTimeProvider datetimeProvider = new UtcDateTimeProvider();
            IJwtValidator     validator        = new JwtValidator(serializer, datetimeProvider);
            IBase64UrlEncoder urlEncoder       = new JwtBase64UrlEncoder();

            encoder   = new JwtEncoder(algorithm, serializer, urlEncoder);
            decoder   = new JwtDecoder(serializer, urlEncoder);
            SecretKey = "";
        }
Пример #17
0
        public IJwtDecoderExtensionsTest()
        {
            var services = new ServiceCollection();

            services.AddOptions();
            services.AddJwt();

            var provider = services.BuildServiceProvider();

            _jwtEncoder = provider.GetRequiredService <IJwtEncoder>();
            _jwtDecoder = provider.GetRequiredService <IJwtDecoder>();
        }
 public DisruptiveTechAPIClient(string baseUrl, string issuer,
                                string apiKey, string apiKeySecret, string projectId,
                                IJwtEncoder jwtEncoder)
 {
     client = new RestClient(baseUrl);
     client.UseSerializer <JsonNetSerializer>();
     this.issuer       = issuer;
     this.apiKey       = apiKey;
     this.apiKeySecret = apiKeySecret;
     this.projectId    = projectId;
     this.jwtEncoder   = jwtEncoder;
 }
Пример #19
0
        public void Dispose()
        {
            _encoder = null;
            _decoder = null;

            _algorithm  = null;
            _serializer = null;
            _urlEncoder = null;

            _provider  = null;
            _validator = null;
        }
Пример #20
0
        static JWTTools()
        {
            algorithm  = new HMACSHA256Algorithm();
            serializer = new JsonNetSerializer();
            urlEncoder = new JwtBase64UrlEncoder();

            encoder = new JwtEncoder(algorithm, serializer, urlEncoder);

            provider  = new UtcDateTimeProvider();
            validator = new JwtValidator(serializer, provider);
            decoder   = new JwtDecoder(serializer, validator, urlEncoder, algorithm);
        }
Пример #21
0
        public JWT_Provider()
        {
            _algorithm  = new HMACSHA256Algorithm();
            _serializer = new JsonNetSerializer();
            _urlEncoder = new JwtBase64UrlEncoder();
            _encoder    = new JwtEncoder(_algorithm, _serializer, _urlEncoder);


            _provider  = new UtcDateTimeProvider();
            _validator = new JwtValidator(_serializer, _provider);
            _decoder   = new JwtDecoder(_serializer, _validator, _urlEncoder, _algorithm);
        }
Пример #22
0
        public JWTTokenProvider(IOptions <JWTSettings> optionsAccessor)
        {
            _jwtSettings = optionsAccessor.Value;

            IJwtAlgorithm     algorithm  = new HMACSHA256Algorithm();
            IJsonSerializer   serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
            IJwtValidator     validator  = new JwtValidator(serializer, new UtcDateTimeProvider());

            _encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
            _decoder = new JwtDecoder(serializer, validator, urlEncoder);
        }
Пример #23
0
        public JwtWrapper()
        {
            //Dependencies
            IJwtAlgorithm     jwtAlgorithm     = new HMACSHA256Algorithm();
            IJsonSerializer   jsonSerializer   = new JsonNetSerializer();
            IBase64UrlEncoder base64UrlEncoder = new JwtBase64UrlEncoder();
            IDateTimeProvider dateTimeProvider = new UtcDateTimeProvider();
            IJwtValidator     jwtValidator     = new JwtValidator(jsonSerializer, dateTimeProvider);

            //Initialize
            _jwtEncoder = new JwtEncoder(jwtAlgorithm, jsonSerializer, base64UrlEncoder);
            _jwtDecoder = new JwtDecoder(jsonSerializer, jwtValidator, base64UrlEncoder);
        }
Пример #24
0
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para el servicio Aspen.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        public virtual void AddSigninPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret)
        {
            Dictionary <string, object> payload = new Dictionary <string, object>();

            ServiceLocator.Instance.PayloadClaimsManager.AddNonceClaim(payload, ServiceLocator.Instance.NonceGenerator.GetNonce());
            ServiceLocator.Instance.PayloadClaimsManager.AddEpochClaim(payload, ServiceLocator.Instance.EpochGenerator.GetSeconds());
            string jwt = jwtEncoder.Encode(payload, apiSecret);

            request.AddHeader(ServiceLocator.Instance.RequestHeaderNames.PayloadHeaderName, jwt);
        }
Пример #25
0
        public JwtTokenProvider(IOptions <JwtTokenProviderOptions> config, ILogger <JwtTokenProvider> logger)
        {
            _secret = config.Value.Secret ?? throw new ArgumentException("secret not defined");
            _logger = logger;

            IJwtAlgorithm     algorithm  = new HMACSHA256Algorithm();
            IJsonSerializer   serializer = new JsonNetSerializer();
            IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
            IJwtValidator     validator  = new JwtValidator(serializer, new UtcDateTimeProvider());

            _encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
            _decoder = new JwtDecoder(serializer, validator, urlEncoder, algorithm);
        }
        /// <summary>
        /// Agrega la cabecera con los datos de la carga útil necesarios para firmar una solicitud de una aplicación a partir del token de autenticación.
        /// </summary>
        /// <param name="request">Solicitud a donde se agrega la cabecera.</param>
        /// <param name="jwtEncoder">Instancia del codificador del contenido de la carga útil.</param>
        /// <param name="apiSecret">Secreto de la aplicación que se utiliza para codificar el contenido del carga útil.</param>
        /// <param name="token">El token de autenticación emitido para la aplicación.</param>
        public override void AddSignedPayloadHeader(
            IRestRequest request,
            IJwtEncoder jwtEncoder,
            string apiSecret,
            string token)
        {
            if (!string.IsNullOrEmpty(this.customAppSecret))
            {
                base.AddSignedPayloadHeader(request, jwtEncoder, this.customAppSecret, token);
                return;
            }

            this.AddPayloadHeader(request);
        }
Пример #27
0
        public JwtService(IConfiguration configuration)
        {
            _jwtSecretToken = configuration["JwtSecretToken"];

            var algorithm     = new HMACSHA256Algorithm();
            var serializer    = new JsonNetSerializer();
            var base64Encoder = new JwtBase64UrlEncoder();

            _jwtEncoder = new JwtEncoder(algorithm, serializer, base64Encoder);

            var dateTimeProvider = new UtcDateTimeProvider();
            var jwtValidator     = new JwtValidator(serializer, dateTimeProvider);

            _jwtDecoder = new JwtDecoder(serializer, jwtValidator, base64Encoder, algorithm);
        }
        /// <summary>
        /// Inicializa una nueva instancia de la clase <see cref="AspenClient"/>
        /// </summary>
        /// <param name="settings">Configuración de inicialización.</param>
        private AspenClient(ISettings settings)
        {
            this.nonceGenerator      = settings?.NonceGenerator ?? new GuidNonceGenerator();
            this.epochGenerator      = settings?.EpochGenerator ?? new UnixEpochGenerator();
            this.customHeaderManager = settings?.CustomHeaderManager ?? new CustomHeaderManager();
            IJsonSerializer serializer = settings?.JsonSerializer ?? new JsonNetSerializer();

            this.settings = settings;
            this.proxy    = settings?.Proxy;
            this.encoder  = new JwtEncoder(this.algorithm, serializer, this.urlEncoder);
            JwtValidator validator = new JwtValidator(serializer, this.datetimeProvider);

            this.decoder    = new JwtDecoder(serializer, validator, this.urlEncoder);
            this.AppScope   = settings?.AppScope ?? AppScope.Autonomous;
            this.DeviceInfo = settings?.DeviceInfo ?? new DeviceInfo();
        }
Пример #29
0
        public void InitializerPropertiesTest()
        {
            Mock <IJsonSerializer>   mSerializer   = new Mock <IJsonSerializer>();
            IJsonSerializer          serializer    = mSerializer.Object;
            Mock <IDateTimeProvider> mProvider     = new Mock <IDateTimeProvider>();
            IDateTimeProvider        provider      = mProvider.Object;
            Mock <IJwtValidator>     mValidator    = new Mock <IJwtValidator>();
            IJwtValidator            validator     = mValidator.Object;
            Mock <IBase64UrlEncoder> mUrlEncoder   = new Mock <IBase64UrlEncoder>();
            IBase64UrlEncoder        urlEncoder    = mUrlEncoder.Object;
            Mock <IJwtDecoder>       mDecoder      = new Mock <IJwtDecoder>();
            IJwtDecoder            decoder         = mDecoder.Object;
            Mock <IJwtAlgorithm>   mAlgorithm      = new Mock <IJwtAlgorithm>();
            IJwtAlgorithm          algorithm       = mAlgorithm.Object;
            Mock <IJwtEncoder>     mEncoder        = new Mock <IJwtEncoder>();
            IJwtEncoder            encoder         = mEncoder.Object;
            Mock <ILoggingService> mLoggingService = new Mock <ILoggingService>();
            ILoggingService        loggingService  = mLoggingService.Object;

            using (SecureString secret = _secret.ToSecureString())
                using (JwtServiceArgs args = new JwtServiceArgs(false, null, null)
                {
                    Secret = _secret,
                    SecureSecret = secret,
                    Serializer = serializer,
                    Provider = provider,
                    Validator = validator,
                    UrlEncoder = urlEncoder,
                    Decoder = decoder,
                    Algorithm = algorithm,
                    Encoder = encoder,
                    LoggingService = loggingService
                })
                {
                    Assert.Equal(_secret, args.Secret);
                    Assert.Equal(secret, args.SecureSecret);
                    Assert.Equal(_secret, args.SecureSecret.ToPlainText());
                    Assert.Equal(serializer, args.Serializer);
                    Assert.Equal(provider, args.Provider);
                    Assert.Equal(validator, args.Validator);
                    Assert.Equal(urlEncoder, args.UrlEncoder);
                    Assert.Equal(decoder, args.Decoder);
                    Assert.Equal(algorithm, args.Algorithm);
                    Assert.Equal(encoder, args.Encoder);
                    Assert.Equal(loggingService, args.LoggingService);
                }
        }
Пример #30
0
        private void TryCreateEncoder()
        {
            if (_algorithm is null && _algFactory is null)
            {
                throw new InvalidOperationException($"Can't instantiate {nameof(JwtEncoder)}. Call {nameof(WithAlgorithm)}.");
            }
            if (_serializer is null)
            {
                throw new InvalidOperationException($"Can't instantiate {nameof(JwtEncoder)}. Call {nameof(WithSerializer)}");
            }
            if (_urlEncoder is null)
            {
                throw new InvalidOperationException($"Can't instantiate {nameof(JwtEncoder)}. Call {nameof(WithUrlEncoder)}.");
            }

            _encoder = new JwtEncoder(_algorithm, _serializer, _urlEncoder);
        }