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)); }
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)); }