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