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();
  • 相关阅读:
    JDK版本1.6和6.0到底指什么
    分布式存储Memcache替代Session方案
    Spring事务隔离级别和传播特性
    高性能并发系统架构应该如何设计?关键是什么?12306
    Idea无法DEBUG的问题
    springboot(三 使用mybatis +springboot 完成简单的增删改查)
    springboot(二 如何访问静态资源和使用模板引擎,以及 全局异常捕获)
    spring boot (入门简介 demo)
    java1.8新特性(optional 使用)
    java1.8 新特性(关于 match,find reduce )操作
  • 原文地址:https://www.cnblogs.com/wintersoft/p/10147054.html
Copyright © 2011-2022 走看看