zoukankan      html  css  js  c++  java
  • .net core cookie登录和session的 DataProtectionProvider 加入 redis

                    string redisConnectionString = Configuration.GetSection("Storage:Redis").GetValue<string>("ConnectionString");
                    string redisInstanceName = Configuration.GetSection("Storage:Redis").GetValue<string>("InstanceName");
                    services.AddDistributedRedisCache(options =>
                    {
                        options.Configuration = $"{redisConnectionString},defaultDataBase=0";
                        options.InstanceName = redisInstanceName;
                    });
    
                    IDataProtectionBuilder dataProtectionBuilder = services.AddDataProtection()
                        .SetApplicationName("XXX")
                        .UseCryptographicAlgorithms(
                            new AuthenticatedEncryptorConfiguration()
                            {
                                EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
                                ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
                            })
                        .PersistKeysToRedis(ConnectionMultiplexer.Connect($"{redisConnectionString},defaultDataBase=0"), "XXX-DataProtection-Keys");
    
                    services.AddSession(options =>
                    {
                        options.IdleTimeout = TimeSpan.FromMinutes(20); //session活期时间
                        options.Cookie = new CookieBuilder()
                        {
                            Name = $".{GetType().Namespace}.Session",
                            HttpOnly = true,
                        };
                    });
    
                    services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));//中文乱码
    
                    services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
                    .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme, options =>
                    {
                        options.DataProtectionProvider = CreateRedisDataProtectionProvider(ConnectionMultiplexer.Connect($"{redisConnectionString},defaultDataBase=1"));
                        //options.DataProtectionProvider = DataProtectionProvider.Create(new DirectoryInfo(@"C:\_sso"));
                        options.SlidingExpiration = true;
                        options.LoginPath = "/account/signin";
                        options.Cookie = new CookieBuilder()
                        {
                            HttpOnly = true,
                            Name = $".{GetType().Namespace}",
                        };
                    });
            IDataProtectionProvider CreateRedisDataProtectionProvider(IConnectionMultiplexer connection)
            {
                return new ServiceCollection()
                    .AddDataProtection()
                    .SetApplicationName("XXX.SSO")
                    .UseCryptographicAlgorithms(
                        new AuthenticatedEncryptorConfiguration()
                        {
                            EncryptionAlgorithm = EncryptionAlgorithm.AES_256_CBC,
                            ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
                        })
                    .PersistKeysToRedis(connection, "XXX-SSO-DataProtection-Keys")
                    .Services
                    .BuildServiceProvider()
                    .GetRequiredService<IDataProtectionProvider>();
            }
                    app.UseAuthentication();
                    app.UseSession();//在UseMvc前面
                    app.UseMvc();
  • 相关阅读:
    2015-10-09 Fri 晴 加快进度看书
    lseek()函数
    pipe()管道最基本的IPC机制
    linux VFS 内核数据结构
    tcp协议中mss的理解
    tcp的精髓:滑动窗口
    2015-10-11 Sunday 晴 ARM学习
    2015-10-12 晴 审面包车
    2015-10-14 晴 tcp/ip
    pyfits过滤数据更新文件。
  • 原文地址:https://www.cnblogs.com/wintersoft/p/10147054.html
Copyright © 2011-2022 走看看