示例#1
0
        /// <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);
        }
示例#2
0
        /// <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)));
        }