public virtual Task <AuthenticateResult> AuthenticateExternalAsync(Models.ExternalIdentity externalUser)
        {
            var query =
                from u in _users
                where
                u.Provider == externalUser.Provider.Name &&
                u.ProviderId == externalUser.ProviderId
                select u;

            var user = query.SingleOrDefault();

            if (user == null)
            {
                var name = externalUser.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);
                if (name == null)
                {
                    return(Task.FromResult <AuthenticateResult>(null));
                }

                user = new InMemoryUser
                {
                    Subject    = Guid.NewGuid().ToString("N"),
                    Provider   = externalUser.Provider.Name,
                    ProviderId = externalUser.ProviderId,
                    Username   = name.Value,
                    Claims     = externalUser.Claims
                };
                _users.Add(user);
            }

            var p      = IdentityServerPrincipal.Create(user.Subject, GetDisplayName(user), Constants.AuthenticationMethods.External, user.Provider);
            var result = new AuthenticateResult(p);

            return(Task.FromResult(result));
        }
Example #2
0
        public Task <ExternalAuthenticateResult> AuthenticateExternalAsync(string subject, Models.ExternalIdentity externalUser)
        {
            var query =
                from u in _users
                where
                u.Provider == externalUser.Provider.Name &&
                u.ProviderId == externalUser.ProviderId
                select u;

            var user = query.SingleOrDefault();

            if (user == null)
            {
                var name = externalUser.Claims.FirstOrDefault(x => x.Type == Constants.ClaimTypes.Name);
                if (name == null)
                {
                    return(Task.FromResult <ExternalAuthenticateResult>(null));
                }
                var claims = externalUser.Claims.Except(new Claim[] { name });

                user = new InMemoryUser
                {
                    Subject    = Guid.NewGuid().ToString("N"),
                    Provider   = externalUser.Provider.Name,
                    ProviderId = externalUser.ProviderId,
                    Username   = name.Value,
                    Claims     = claims.ToArray()
                };
                _users.Add(user);
            }

            return(Task.FromResult(new ExternalAuthenticateResult(user.Provider, user.Subject, user.Username)));
        }
 public System.Threading.Tasks.Task <AuthenticateResult> AuthenticateExternalAsync(Models.ExternalIdentity externalUser)
 {
     externalUser.Claims = filter.Filter(externalUser.Provider, externalUser.Claims);
     return(inner.AuthenticateExternalAsync(externalUser));
 }