示例#1
0
        public string GenerateNewToken(MT4ConnectOption connect)
        {
            var manager = mt4managerProvider.Invoke();

            manager.Communication(connect);
            var identity = GetIdentity(c =>
            {
                c.Add(new Claim(ClaimTypeOption.MT4Login, manager.LastLogin.ToString()));
                c.Add(new Claim(ClaimTypeOption.MT4Server, manager.LastServer));
            });

            var now = DateTime.UtcNow;
            // создаем JWT-токен
            var jwt = new JwtSecurityToken(
                issuer: tokenOption.issuer,
                audience: tokenOption.audience,
                notBefore: now,
                claims: identity.Claims,
                expires: now.Add(TimeSpan.FromMinutes(tokenOption.lifetime)),
                signingCredentials: new SigningCredentials(tokenOption.GetSymmetricSecurityKey(), SecurityAlgorithms.HmacSha256));
            var encodedJwt = new JwtSecurityTokenHandler().WriteToken(jwt);

            cache.Add(encodedJwt, manager);

            return(encodedJwt);
        }
示例#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);
        }