Example #1
0
        private IServiceCollection AddJwt(IServiceCollection services)
        {
            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);

            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.SaveToken = true;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidIssuer              = jwtSetting.Issuer,
                    ValidateAudience         = true,
                    ValidAudience            = jwtSetting.Audience,
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),
                    ValidateLifetime         = true,
                    ClockSkew = TimeSpan.Zero
                };
            });
            return(services);
        }
Example #2
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHttpContextAccessor();
            services.AddScoped <IIdentityService, IdentityService>();
            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);

            //services.AddCors(options =>
            //{
            //    options.AddPolicy("any", builder =>
            //    {
            //        builder.AllowAnyOrigin() //允许任何来源的主机访问
            //        .AllowAnyMethod()
            //        .AllowAnyHeader();

            //    });
            //});

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),
                    // 默认 300s
                    ClockSkew = TimeSpan.Zero
                };
            });
            services.AddControllers();
        }
        /// <summary>
        /// 加入jwt授权
        /// </summary>
        /// <param name="services"></param>
        /// <param name="Configuration"></param>
        /// <returns></returns>
        public static IServiceCollection AddAuthentication(this IServiceCollection services, IConfiguration Configuration)
        {
            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);                            //读取配置

            services.Configure <JwtSetting>(Configuration.GetSection("JwtSetting")); //将读取到的配置注入

            services.AddHttpContextAccessor();
            services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
            services.AddScoped <IIdentityService, IdentityService>();
            services.AddScoped <ITokenService, TokenService>();

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.SaveToken                 = true;
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer   = true,
                    ValidateAudience = true,
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),
                    // 默认 300s
                    ClockSkew = TimeSpan.Zero
                };
            });
            return(services);
        }
Example #4
0
 public JwtMiddleware(RequestDelegate next,
                      IOptions <JwtSetting> jwtSetting
                      )
 {
     _next       = next;
     _jwtSetting = jwtSetting?.Value;
 }
Example #5
0
        public static IServiceCollection AddApskJwtBearer(this IServiceCollection services, IConfiguration configuration)
        {
            var jwtSetting = new JwtSetting();

            configuration.GetSection(nameof(JwtSetting)).Bind(jwtSetting);

            if (jwtSetting is null)
            {
                throw new System.ArgumentNullException(nameof(jwtSetting));
            }

            services.AddAuthentication(opt =>
            {
                opt.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                opt.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(opt =>
            {
                opt.ClaimsIssuer              = jwtSetting.Issuer;
                opt.Audience                  = jwtSetting.Audience;
                opt.RequireHttpsMetadata      = false;
                opt.SaveToken                 = true;
                opt.TokenValidationParameters = new TokenValidationParameters()
                {
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.Secret)),
                    ValidAudience    = jwtSetting.Audience,
                    ValidIssuer      = jwtSetting.Issuer
                };
            });
            return(services);
        }
Example #6
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddHttpContextAccessor();
            services.AddScoped <IIdentityService, IdentityService>();

            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),
                    // 默认 300s
                    ClockSkew = TimeSpan.Zero
                };
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
Example #7
0
        public static IServiceCollection AddJwtAuthentication(this IServiceCollection services, IConfiguration configuration)
        {
            var jwtConfig  = new JwtSetting();
            var jwtSection = configuration.GetSection("JwtSetting");

            jwtSection.Bind(jwtConfig);
            services.Configure <JwtSetting>(jwtSection);

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.RequireHttpsMetadata      = false;
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer           = true,
                    ValidateAudience         = true,
                    ValidateLifetime         = true,
                    ValidateIssuerSigningKey = true,
                    ValidIssuer      = jwtConfig.ValidIssuer,
                    ValidAudience    = jwtConfig.ValidAudience,
                    IssuerSigningKey = jwtConfig.SymmetricSecurityKey
                };
            });
            services.AddAuthorization(options =>
            {
                options.DefaultPolicy = new AuthorizationPolicyBuilder(JwtBearerDefaults.AuthenticationScheme)
                                        .RequireAuthenticatedUser()
                                        .Build();
            });

            return(services);
        }
Example #8
0
        public static string GetToken(JwtSetting jwtSetting, User user)
        {
            //创建用户身份标识,可按需要添加更多信息
            var claims = new Claim[]
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("user_id", user.user_id),                                      // 用户id
                new Claim("user_name", user.user_name),                                  // 用户名
                new Claim("is_admin", user.is_admin.ToString(), ClaimValueTypes.Boolean) // 是否是管理员
            };

            //创建令牌
            var token = new JwtSecurityToken(
                issuer: jwtSetting.Issuer,
                audience: jwtSetting.Audience,
                signingCredentials: jwtSetting.Credentials,
                claims: claims,
                notBefore: DateTime.Now,
                expires: DateTime.Now.AddSeconds(jwtSetting.ExpireSeconds)
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
Example #9
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            // 添加mvc
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);

            // ioc
            services.AddScoped <IAuthAppService, AuthAppService>();
            services.AddScoped <IUserAppService, UserAppService>();

            // jwt校验
            services.Configure <JwtSetting>(Configuration.GetSection("JwtSetting"));
            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);
            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),
                    // 默认允许 300s  的时间偏移量,设置为0
                    ClockSkew = TimeSpan.Zero
                };
            });


            // 注册swagger生成器
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new OpenApiInfo
                {
                    Title          = "user api",
                    Version        = "v1",
                    Description    = "懒虫商城--user api",
                    TermsOfService = new Uri("http://www.baidu.com"),
                    Contact        = new OpenApiContact
                    {
                        Name  = "lazy",
                        Email = "邮箱",
                        Url   = new Uri("http://www.baidu.com")
                    },
                    License = new OpenApiLicense
                    {
                        Name = "许可证名字",
                        Url  = new Uri("http://www.baidu.com")
                    }
                });

                // 为 Swagger JSON and UI设置xml文档注释路径
                var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                //获取应用程序所在目录(绝对,不受工作目录影响,建议采用此方法获取路径)
                //添加接口XML的路径
                var xmlPath = Path.Combine(basePath, "Interfaces.UserAPI.xml");
                //如果需要显示控制器注释只需将第二个参数设置为true
                c.IncludeXmlComments(xmlPath, true);
            });
        }
Example #10
0
        internal static (string tokenString, DateTime expireTo) GenToken(Users user, JwtSetting setting, int expire)
        {
            var tokenHandler = new JwtSecurityTokenHandler();
            var keybyte      = Encoding.ASCII.GetBytes(setting.Key);
            var expireTo     = DateTime.UtcNow.AddMinutes(expire);

            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Issuer   = setting.Issuer,
                Audience = setting.Audience,
                Subject  = new ClaimsIdentity(new Claim[]
                {
                    //UserGuid
                    new Claim("ID", user.Id.ToString()),
                    //主體內容
                    new Claim(JwtRegisteredClaimNames.Sub, user.LoginName),
                    //唯一識別碼,是區分大小寫的字串
                    new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                    //頒發時間,是數字日期
                    new Claim(JwtRegisteredClaimNames.Iat, DateTime.UtcNow.ToString(CultureInfo.InvariantCulture)),
                    new Claim(JwtRegisteredClaimNames.GivenName, user.FirstName),
                    new Claim(JwtRegisteredClaimNames.FamilyName, user.LastName),
                    new Claim(JwtRegisteredClaimNames.Email, user.Email)
                }),
                Expires            = expireTo,
                SigningCredentials =
                    new SigningCredentials(new SymmetricSecurityKey(keybyte), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token), expireTo);
        }
Example #11
0
        public UserTokenVM BuildUserToken(UserVM userVM)
        {
            var jwtSetting = new JwtSetting();

            _config.Bind("JwtSetting", jwtSetting);

            //UserInfo
            var claims = new Claim[]
            {
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString()),
                new Claim("userId", userVM.UserId.ToString()),
                new Claim("name", userVM.Name),
            };

            var expireIn = DateTime.UtcNow.AddMinutes(jwtSetting.ExpireMinutes);
            var jwtToken = GenerateJwtToken(jwtSetting, claims, expireIn);

            var tokenResponse = new UserTokenVM()
            {
                Token    = jwtToken,
                ExpireIn = new DateTimeOffset(expireIn).ToUnixTimeSeconds(),
                UserName = userVM.Name
            };

            return(tokenResponse);
        }
Example #12
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddCors(options =>
            {
                options.AddPolicy("any",
                                  builder => builder.WithOrigins("http://localhost:44362",
                                                                 "http://localhost:63342").AllowAnyHeader().
                                  AllowAnyOrigin().AllowAnyMethod());
            });
            services.AddControllersWithViews().AddNewtonsoftJson();
            services.AddDbContextPool <AppDbContext>(options =>
                                                     options.UseMySQL(_config.GetConnectionString("DBConnection"))
                                                     );
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo
                {
                    Version     = "v0.1.0",
                    Title       = "Api",
                    Description = "说明文档",
                    Contact     = new Microsoft.OpenApi.Models.OpenApiContact {
                        Name = "AAAApi", Email = "892542", Url = new Uri("http://www.baidu.com")
                    }
                });
                var basePath = AppContext.BaseDirectory;
                var xmlPath  = Path.Combine(basePath, "PicCommunitity.xml");
                c.IncludeXmlComments(xmlPath, true);
            });
            services.AddMvc(options =>
            {
            }).AddXmlSerializerFormatters();

            //配置Jwt验证
            services.Configure <JwtSetting>(_config.GetSection("JwtSetting"));
            var jwtSetting = new JwtSetting();

            _config.Bind("JwtSetting", jwtSetting);
            services.AddAuthentication(x =>
            {
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(o => {
                o.TokenValidationParameters = new TokenValidationParameters
                {
                    //是否验证发行人
                    ValidateIssuer = true,
                    ValidIssuer    = jwtSetting.Issuer,     //发行人
                                                            //是否验证受众人
                    ValidateAudience = true,
                    ValidAudience    = jwtSetting.Audience, //受众人
                                                            //是否验证密钥
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecurityKey)),

                    ValidateLifetime      = true, //验证生命周期
                    RequireExpirationTime = false //过期时间
                };
            });
        }
Example #13
0
 public AuthController(IOptions <JwtSetting> options)
 {
     if (options == null)
     {
         throw new ArgumentNullException(nameof(options));
     }
     _jwtSetting = options.Value;
 }
Example #14
0
 public RpcTokenService(IUserService userService,
                        ITokenService tokenService,
                        IOptions <JwtSetting> option)
 {
     _userService  = userService;
     _tokenService = tokenService;
     _jwtSetting   = option.Value;
 }
 /// <summary>
 ///
 /// </summary>
 /// <param name="configuration"></param>
 /// <param name="jwtSetting">jwt认证配置</param>
 /// <param name="userRepository"></param>
 public AuthorizeController(IConfiguration configuration,
                            IOptions <JwtSetting> jwtSetting,
                            IQuickAdminRepository <User> userRepository)
 {
     _configuration  = configuration;
     _jwtSettings    = jwtSetting.Value;
     _userRepository = userRepository;
 }
Example #16
0
 public AuthService(UserManager <AppUser> userManager,
                    RoleManager <IdentityRole> roleManager,
                    IOptions <JwtSetting> jwtSetting)
 {
     _userManager = userManager;
     _roleManager = roleManager;
     _jwtSetting  = jwtSetting.Value;
 }
Example #17
0
 protected BaseController(IDistributedCache distributedCache, ApplicationDbContext db, IMapper mapper, IOptions <JwtSetting> jwtsetting
                          , IHttpContextAccessor httpContextAccessor)
 {
     _httpContextAccessor = httpContextAccessor;
     _distributedCache    = distributedCache;
     _db         = db;
     _jwtsetting = jwtsetting.Value;
     _mapper     = mapper;
 }
Example #18
0
 public AuthService(
     UserManager <ApplicationUser> userManager,
     IEmailService emailService,
     IOptions <JwtSetting> jwtSetting)
 {
     _userManager  = userManager;
     _emailService = emailService;
     _jwtSetting   = jwtSetting.Value;
 }
 public AuthController(
     IAuthRepository authRepository,
     IUserRepository userRepository,
     IOptions <JwtSetting> options)
 {
     this.authRepository = authRepository;
     this.userRepository = userRepository;
     this.options        = options.Value;
 }
Example #20
0
 public static void AddOptionSetting(this IServiceCollection services, IConfiguration configuration)
 {
     services.AddSingleton <JwtSetting>((store) =>
     {
         JwtSetting jwtSetting = new JwtSetting();
         configuration.Bind(nameof(JwtSetting), jwtSetting);
         return(jwtSetting);
     });
 }
Example #21
0
        public void InstallServices(IServiceCollection services, IConfiguration configuration)
        {
            var jwtsetting = new JwtSetting();

            configuration.Bind(nameof(jwtsetting), jwtsetting);
            services.AddSingleton(jwtsetting);
            services.AddScoped <IIdentityService, IdentityService>();
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(x => {
                x.SaveToken = true;
                x.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtsetting.Secert)),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = true,
                };
            });


            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            services.AddSwaggerGen(x => {
                x.SwaggerDoc("v1", new Microsoft.OpenApi.Models.OpenApiInfo()
                {
                    Title = "TweetApi", Version = "v1 "
                });


                var ApiSecurityScheme = new OpenApiSecurityScheme
                {
                    Description = "ddddd",
                    Name        = "Authorizaton",
                    In          = ParameterLocation.Header,
                    Type        = SecuritySchemeType.ApiKey
                };

                x.AddSecurityDefinition("Bearer", ApiSecurityScheme);

                x.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    {
                        ApiSecurityScheme
                        ,
                        new[] { "readAccess", "writeAccess" }
                    }
                });
            });

            //   services.AddSingleton<IPostService, PostService>();
        }
 public LoginController(IOptions <JwtSetting> options)
 {
     _user = new User
     {
         Id       = 1,
         Name     = "todd",
         Password = "******"
     };
     _jwtSetting = options.Value;
 }
Example #23
0
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddApplication <blogWebModule>();
            //services.AddIdentity<AppUser, IdentityRole>();

            services.AddAuthentication()
            .AddFacebook(facebook =>
            {
                facebook.AppId     = Configuration["FacebookAuth:AppID"];
                facebook.AppSecret = Configuration["FacebookAuth:AppSecret"];
            })
            .AddGoogle(ggOptions =>
            {
                ggOptions.ClientId     = Configuration["GoogleAuth:ClientId"];
                ggOptions.ClientSecret = Configuration["GoogleAuth:ClientSecret"];
            });

            services.AddScoped <ICateAppService, CategoryService>();
            services.AddScoped <IPostAppService, PostService>();
            services.AddScoped <IAccountAppService, AccountAppService>();
            services.AddScoped <IPermissionAppService, PermissionAppService>();
            services.AddScoped <IIdentityRoleAppService, IdentityRoleAppSerivce>();
            services.AddScoped <IIdentityAppService, IdentityAppService>();
            services.AddScoped <IDocumentAppService, DocumentAppService>();

            var jwtSettings = new JwtSetting();

            Configuration.Bind(nameof(jwtSettings), jwtSettings);
            services.AddSingleton(jwtSettings);

            //Facebook Auth
            var facebookAuthSettings = new FacebookAuthSettings();

            Configuration.Bind(nameof(FacebookAuthSettings), facebookAuthSettings);
            services.AddSingleton(facebookAuthSettings);
            services.AddHttpClient();
            services.AddSingleton <IFacebookAuthService, FacebookAuthService>();

            //Config uri service
            services.AddScoped <IUriService, UriService>();
            services.AddSingleton <IUriService>(provider =>
            {
                //add DI IUriService-UriService, lấy baseUri để đưa cho hàm tạo của UriService
                //Khi ta gửi request đến server, request đó sẽ chứa các thuộc tính như: path/scheme/..
                //Ví dụ gửi request xem tất cả các post
                //scheme: https
                //path: api/v1/posts
                var accessor    = provider.GetRequiredService <IHttpContextAccessor>();
                var request     = accessor.HttpContext.Request;
                var absoluteUri = string.Concat(request.Scheme, "://", request.Host.ToUriComponent(), "/");
                return(new UriService(absoluteUri));
            });
        }
Example #24
0
 public LoginService(ILogger <LoginService> logger,
                     IUserService userService,
                     IOptions <JwtSetting> jwtSetting,
                     ICacheProvider cacheProvider,
                     IJwtTokenService jwtTokenService
                     )
 {
     _logger          = logger;
     _userService     = userService;
     _jwtSetting      = jwtSetting?.Value;
     _cacheProvider   = cacheProvider;
     _jwtTokenService = jwtTokenService;
 }
Example #25
0
        // This method gets called by the runtime. Use this method to add services to the container.
        // Use Autofac.

        /*public IServiceProvider ConfigureServices(IServiceCollection services)
         * {
         *  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
         *
         *  var builder = new ContainerBuilder();
         *  builder.RegisterType<Message>().As<IMessage>();
         *  builder.Register(m => new Message("test")).As<IMessage>();
         *  builder.Populate(services);
         *  var applicationContainer = builder.Build();
         *
         *  return new AutofacServiceProvider(applicationContainer);
         * }*/


        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);

            services
            .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(options =>
            {
                options.IncludeErrorDetails = true;
                var keybytes = Encoding.UTF8.GetBytes(jwtSetting.SecurityKey);
                var signKey  = new SymmetricSecurityKey(keybytes);
                options.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuer   = true,
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = signKey
                };
            });

            services.Configure <JwtSetting>(Configuration.GetSection("JwtSetting"));

            services.AddSingleton(factory => {
                Func <string, IMessage> accessor = key =>
                {
                    if (key.Equals("message"))
                    {
                        return(new Message());
                    }
                    else if (key.Equals("anotherMessage"))
                    {
                        return(new AnotherMessage());
                    }
                    else
                    {
                        throw new Exception("not support");
                    }
                };

                return(accessor);
            });
            //services.AddTransient<IMessage, Message>();
            services.AddScoped <IMessage, Message>();
            services.AddSingleton <IJWTUtility, JWTUtility>();
        }
Example #26
0
        private string GenerateJwtToken(JwtSetting jwtSetting, Claim[] claims, DateTime expireIn)
        {
            var token = new JwtSecurityToken(
                issuer: jwtSetting.Issuer,
                audience: jwtSetting.Issuer,
                signingCredentials: jwtSetting.Credentials,
                claims: claims,
                notBefore: DateTime.UtcNow,
                expires: expireIn
                );

            string jwtToken = new JwtSecurityTokenHandler().WriteToken(token);

            return(jwtToken);
        }
Example #27
0
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            //配置授权策略必须为Admin
            services.AddAuthorization(Options =>
            {
                Options.AddPolicy("Admin", policy => policy.RequireClaim("Admin"));
            });

            services.Configure <JwtSetting>(Configuration.GetSection("JwtSetting"));

            var jwtSetting = new JwtSetting();

            Configuration.Bind("JwtSetting", jwtSetting);

            //JWT相关参数的配置
            services.AddAuthentication(options =>
            {
                options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            }).AddJwtBearer(o =>
            {
                o.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidIssuer      = jwtSetting.Issuer,
                    ValidAudience    = jwtSetting.Audience,
                    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwtSetting.SecretKey))
                };

                //清除默认验证
                o.SecurityTokenValidators.Clear();
                //自定义ValidateToken
                o.SecurityTokenValidators.Add(new GeekValidateToken());
                //自定义Header参数
                o.Events = new JwtBearerEvents
                {
                    OnMessageReceived = context =>
                    {
                        var token = context.Request.Headers["token"];
                        Console.WriteLine("==================" + token + "======================");
                        context.Token = token.FirstOrDefault();
                        return(Task.CompletedTask);
                    }
                };
            });

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }
Example #28
0
        public static void ConfigureJwtAuthentication(IServiceCollection services, IConfigurationSection jwtAppSettings)
        {
            JwtSetting appSettings = jwtAppSettings.Get <JwtSetting>();

            byte[] secretKey = Encoding.ASCII.GetBytes(appSettings.SecretKey);

            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme, jwtBearerOptions =>
            {
                jwtBearerOptions.TokenValidationParameters = new TokenValidationParameters
                {
                    IssuerSigningKey = new SymmetricSecurityKey(secretKey),
                    ValidIssuer      = appSettings.Issuer,
                    ValidAudience    = appSettings.Issuer,
                };
            });
        }
Example #29
0
        private string GetToken(string userName, JwtSetting setting)
        {
            string token = string.Empty;

            var claims = new[]
            {
                new Claim(ClaimTypes.Name, userName)
            };
            var key         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(setting.SecurityKey));
            var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
            var jwtToken    = new JwtSecurityToken(setting.Issuer, setting.Audience, claims,
                                                   expires: DateTime.Now.AddSeconds(setting.ExpireSeconds),
                                                   signingCredentials: credentials);

            token = new JwtSecurityTokenHandler().WriteToken(jwtToken);
            return(token);
        }
Example #30
0
        public static JwtSetting  GetJwtSetting(IConfiguration configuration)
        {
            var jwtSetting = new JwtSetting();

            jwtSetting.Audience  = configuration["JwtSettings:Audience"];
            jwtSetting.Issuer    = configuration["JwtSettings:Issuer"];
            jwtSetting.SecretKey = configuration["JwtSettings:SecretKey"];
            string strSeconds    = configuration["JwtSettings:ExpireSeconds"];
            int    expireSeconds = 0;

            int.TryParse(strSeconds, out expireSeconds);
            jwtSetting.ExpireSeconds = expireSeconds <= 0 ? 300 : expireSeconds;
            strSeconds    = configuration["JwtSettings:RefreshExpireSeconds"];
            expireSeconds = 0;
            int.TryParse(strSeconds, out expireSeconds);
            jwtSetting.RefreshExpireSeconds = expireSeconds <= 0 ? 86400 : expireSeconds;
            return(jwtSetting);
        }