/// <summary> /// Create an authentication ticket containing authentication claims when successfully authenticate via token /// </summary> /// <param name="token"></param> /// <param name="user"></param> /// <returns></returns> private AuthenticationTicket CreateAuthTicket(string token, KmsLoginResponse user) { var userData = new ClaimsIdentity( new Claim[] { new Claim(KudoConstants.UserInfo.KEY, token), new Claim(KudoConstants.UserInfo.USERNAME, user.UserName), new Claim(KudoConstants.UserInfo.NAME, user.ShortName), new Claim(KudoConstants.UserInfo.BADGEID, user.EmployeeCode), new Claim(KudoConstants.UserInfo.EMAIL, user.Email) }, Scheme.Name); ClaimsPrincipal principal = new ClaimsPrincipal(userData); var ticket = new AuthenticationTicket(principal, new AuthenticationProperties(), Scheme.Name); return(ticket); }
/// <summary> /// The customized authentication scheme /// </summary> /// <returns></returns> protected override async Task <AuthenticateResult> HandleAuthenticateAsync() { var token = Request.Headers["Authorization"].ToString().Replace("Bearer ", string.Empty); Console.WriteLine(token); string cacheEntry; var user = new KmsLoginResponse(); // Check whether token in cache or not if (!_cache.TryGetValue(token, out _)) { user = await GetUserLogin(token); if (user != null) { cacheEntry = token; var cacheEntryOptions = new MemoryCacheEntryOptions() .SetSlidingExpiration(TimeSpan.FromMinutes(Configuration.GetValue <int>("KmsInfo:CacheExpiration"))); // Save validated token into cache _cache.Set(token, cacheEntry, cacheEntryOptions); _cache.Set <string>(KudoConstants.UserInfo.USERNAME, user.UserName, cacheEntryOptions); _cache.Set <string>(KudoConstants.UserInfo.NAME, user.ShortName, cacheEntryOptions); _cache.Set <string>(KudoConstants.UserInfo.BADGEID, user.EmployeeCode, cacheEntryOptions); _cache.Set <string>(KudoConstants.UserInfo.EMAIL, user.Email, cacheEntryOptions); return(AuthenticateResult.Success(CreateAuthTicket(token, user))); } return(AuthenticateResult.Fail("Token is invalid")); } else { user.UserName = _cache.Get <string>(KudoConstants.UserInfo.USERNAME); user.ShortName = _cache.Get <string>(KudoConstants.UserInfo.NAME); user.EmployeeCode = _cache.Get <string>(KudoConstants.UserInfo.BADGEID); user.Email = _cache.Get <string>(KudoConstants.UserInfo.EMAIL); } return(AuthenticateResult.Success(CreateAuthTicket(token, user))); }