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); }
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); }