protected internal virtual async Task <ExtendedIdentityServerUser> ResolveUserAsync(string authenticationScheme, IClaimBuilderCollection claims) { if (claims == null) { throw new ArgumentNullException(nameof(claims)); } claims = claims.Clone(); var uniqueIdentifierClaim = claims.FindFirstUniqueIdentifierClaim(); if (uniqueIdentifierClaim == null) { throw new InvalidOperationException($"There is no unique-identifier-claim for authentication-scheme \"{authenticationScheme}\"."); } var uniqueIdentifier = uniqueIdentifierClaim.Value; claims.Remove(uniqueIdentifierClaim); var identityProviderClaim = claims.FindFirstIdentityProviderClaim(); var identityProvider = identityProviderClaim?.Value ?? authenticationScheme; if (identityProviderClaim != null) { claims.Remove(identityProviderClaim); } var user = await this.Facade.Identity.ResolveUserAsync(claims, identityProvider, uniqueIdentifier); var nameClaim = claims.FindFirstNameClaim(); var name = nameClaim?.Value; if (nameClaim != null) { claims.Remove(nameClaim); } return(new ExtendedIdentityServerUser(user.Id) { AdditionalClaims = claims.Build(), DisplayName = name, IdentityProvider = identityProvider, ProviderUserId = uniqueIdentifier }); }
protected internal virtual async Task ResolveUniqueIdentifier(string authenticationScheme, IClaimBuilderCollection claims) { if (claims == null) { throw new ArgumentNullException(nameof(claims)); } var uniqueIdentifierClaim = claims.FindFirstUniqueIdentifierClaim(); if (uniqueIdentifierClaim == null) { throw new InvalidOperationException($"There is no unique-identifier-claim for authentication-scheme \"{authenticationScheme}\"."); } var identityProvider = claims.FindFirstIdentityProviderClaim()?.Value ?? authenticationScheme; uniqueIdentifierClaim.Value = this.GetOrCreateUniqueIdentifier(identityProvider, uniqueIdentifierClaim.Value); uniqueIdentifierClaim.Issuer = uniqueIdentifierClaim.OriginalIssuer = uniqueIdentifierClaim.ValueType = null; await Task.CompletedTask.ConfigureAwait(false); }