/// <summary>
        /// Transformuje claims principla - přidá custom claims.
        /// </summary>
        public Task <ClaimsPrincipal> TransformAsync(ClaimsPrincipal principal)
        {
            UserContextInfo userContextInfo = contextInfoBuilder.GetUserContextInfo(principal);

            // pro nepřihlášeného uživatele žádnou transformaci neprovádíme
            if (userContextInfo == null)
            {
                return(Task.FromResult(principal));
            }

            List <Claim> customClaims = claimsCacheStore.GetClaims(userContextInfo);

            if (customClaims == null)
            {
                // pokud nejsou žádné claims v cache, získáme je a do cache uložíme,
                // ať je pro stejný context další request rychlejší
                customClaims = customClaimsBuilder.GetCustomClaims(principal);
                claimsCacheStore.StoreClaims(userContextInfo, customClaims);
            }

            // zduplikujeme identity a claims tak, že k duplikátům přidáme custom claim
            // pokud bychom přidávali claims do principal, který je parametrem, může se stát (a stalo se!), že se v identity objeví claims vícekrát
            ClaimsIdentity claimsIdentity = ((ClaimsIdentity)principal.Identity).Clone();

            claimsIdentity.AddClaims(customClaims);
            ClaimsPrincipal claimsPrincipalWithCustomClaims = new ClaimsPrincipal(claimsIdentity);

            return(Task.FromResult(claimsPrincipalWithCustomClaims));
        }
 public void StoreClaims(UserContextInfo userContextInfo, List <Claim> claims)
 {
     cache.Set(GetCacheKey(userContextInfo), claims, new MemoryCacheEntryOptions
     {
         Priority = CacheItemPriority.Low,
         AbsoluteExpirationRelativeToNow = new TimeSpan(0, 15, 0)         /* 15 minut */
     });
 }
 public List <Claim> GetClaims(UserContextInfo userContextInfo)
 {
     if (cache.TryGetValue(GetCacheKey(userContextInfo), out List <Claim> result))
     {
         return(result);
     }
     return(null);
 }
示例#4
0
        /// <summary>
        /// Získá custom claims pro daný principal.
        /// </summary>
        public List <Claim> GetCustomClaims(ClaimsPrincipal principal)
        {
            Contract.Requires(principal.Identity.IsAuthenticated);

            List <Claim> result = new List <Claim>();

            UserContextInfo userContextInfo = userContextInfoBuilder.GetUserContextInfo(principal);

            // TODO: Doplnit custom claims (nebo odstranit celou mašinérii v této složce.

            return(result);
        }
示例#5
0
        public override bool Equals(object obj)
        {
            if (ReferenceEquals(this, obj))
            {
                return(true);
            }

            UserContextInfo userContextInfoObj = (UserContextInfo)obj;

            if (userContextInfoObj == null)
            {
                return(false);
            }

            return(this.username == userContextInfoObj.username);
        }
 private object GetCacheKey(UserContextInfo userContextInfo)
 {
     // implementace má přetížen GetHashCode i Equals
     return(userContextInfo);
 }