예제 #1
0
        public TokenManager(
            Func <MT4Manager> mt4managerProvider,
            IOptions <TokenOption> tokenOptions
            )
        {
            this.tokenOption        = tokenOptions.Value;
            this.mt4managerProvider = mt4managerProvider;

            foreach (var o in tokenOption.tokens)
            {
                try
                {
                    var m = mt4managerProvider.Invoke();
                    m.Communication(o.GetMT4ConnectOption());
                    cache.Add(o.token, m);
                }
                catch (Exception)
                {
                    // logger.LogWarning($"Configuration warning. Jwt: {o.token} not valid. Login: {o.login}, Server: {o.server} authorization exception: {e.Message}");
                }
            }
        }
예제 #2
0
        public static IServiceCollection AddTokenManager(this IServiceCollection services, IConfiguration configuration)
        {
            services.AddOptions();
            services.Configure <TokenOption>(option => configuration.Bind(option));
            services.AddSingleton <IDictionary <string, MT4Manager> >(new ConcurrentDictionary <string, MT4Manager>());
            services.AddSingleton <IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton <ITokenManager, TokenManager>();
            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                var tokenOption = new TokenOption(); configuration.Bind(tokenOption);

                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    // укзывает, будет ли валидироваться издатель при валидации токена
                    ValidateIssuer = true,
                    // строка, представляющая издателя
                    ValidIssuer = tokenOption.issuer,

                    // будет ли валидироваться потребитель токена
                    ValidateAudience = true,
                    // установка потребителя токена
                    ValidAudience = tokenOption.audience,
                    // будет ли валидироваться время существования
                    ValidateLifetime = true,

                    // установка ключа безопасности
                    IssuerSigningKey = tokenOption.GetSymmetricSecurityKey(),
                    // валидация ключа безопасности
                    ValidateIssuerSigningKey = true,
                };
            });

            services.AddTransient <IAuthorizationHandler, TokenActiveHandler>();

            return(services);
        }