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
            });
        }
Exemplo n.º 2
0
        protected internal virtual ClaimsPrincipal CreateClaimsPrincipal(string authenticationScheme, IClaimBuilderCollection claims)
        {
            if (claims == null)
            {
                throw new ArgumentNullException(nameof(claims));
            }

            return(new ClaimsPrincipal(new ClaimsIdentity(claims.Build(), authenticationScheme, claims.FindFirstNameClaim()?.Type, null)));
        }