using IdentityServer.Wrapper; using Microsoft.AspNetCore.Authentication; using Microsoft.Extensions.DependencyInjection; using NDB.Security.Authentication.Identity.Abstractions; using System; namespace NDB.Security.Authentication.Identity { public static class AuthenticationExtensions { public static IServiceCollection AddAuthentication(this IServiceCollection services, string identityServerBaseAddress) { services.AddAuthentication(identityServerBaseAddress, new Services.AuthenticationOptions()); return services; } public static IServiceCollection AddAuthentication(this IServiceCollection services, string identityServerBaseAddress, IAuthenticationOptions authenticationOptions) { Validate(identityServerBaseAddress, authenticationOptions); // Identity server services.UseIdentityServices(identityServerBaseAddress); services.AddSingleton(authenticationOptions); // configure authentication AuthenticationServiceCollectionExtensions.AddAuthentication(services, "IdentityAuthentication") .AddScheme("IdentityAuthentication", null); return services; } private static void Validate(string identityServerBaseAddress, IAuthenticationOptions authenticationOptions) { if (string.IsNullOrEmpty(identityServerBaseAddress)) throw new ArgumentException("Identity server base address must be provided."); var guestFuncDefined = authenticationOptions.AuthenticateAsGuest != null; if (guestFuncDefined && string.IsNullOrEmpty(authenticationOptions.GuestUserName)) throw new ArgumentException("Guest function is defined, but guest user name is not set."); } } }