Example #1
0
 public RoleClaim(RoleClaimTypes value, string issuer, string originalIssuer, ClaimsIdentity subject = null)
     : base(ROLE_CLAIM_TYPE, ((int)value).ToString(), ClaimValueTypes.Integer, issuer, originalIssuer, subject)
 {
 }
        public void PreAuthenticate(IRequest req, IResponse res)
        {
            var coreReq         = (HttpRequest)req.OriginalRequest;
            var claimsPrincipal = coreReq.HttpContext.User;

            if (claimsPrincipal.Identity?.IsAuthenticated != true)
            {
                return;
            }

            var sessionId = claimsPrincipal.Claims.FirstOrDefault(x => x.Type == IdClaimType);

            if (sessionId == null)
            {
                throw new NotSupportedException($"Claim '{IdClaimType}' is required");
            }

            var session = SessionFeature.CreateNewSession(req, sessionId.Value);
            var meta    = (session as IMeta)?.Meta;

            session.AuthProvider = Name;

            var sessionValues = new Dictionary <string, string>();

            foreach (var claim in claimsPrincipal.Claims)
            {
                if (RoleClaimTypes.Contains(claim.Type))
                {
                    if (session.Roles == null)
                    {
                        session.Roles = new List <string>();
                    }
                    session.Roles.Add(claim.Value);
                }
                if (PermissionClaimType == claim.Type)
                {
                    if (session.Permissions == null)
                    {
                        session.Permissions = new List <string>();
                    }
                    session.Permissions.Add(claim.Value);
                }
                else if (MapClaimsToSession.TryGetValue(claim.Type, out var sessionProp))
                {
                    sessionValues[sessionProp] = claim.Value;
                }
                else if (meta != null)
                {
                    meta[claim.Type] = claim.Value;
                }
            }

            session.PopulateFromMap(sessionValues);

            if (session.UserAuthName.IndexOf('@') >= 0)
            {
                session.Email = session.UserAuthName;
            }

            PopulateSessionFilter?.Invoke(session, claimsPrincipal, req);

            req.Items[Keywords.Session] = session;
        }
Example #3
0
 public RoleClaim(RoleClaimTypes value, string issuer = "")
     : this(value, issuer, "")
 {
 }