43 lines
1.9 KiB
C#
43 lines
1.9 KiB
C#
|
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<AuthenticationSchemeOptions, IdentityAuthenticationHandler>("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.");
|
|||
|
}
|
|||
|
}
|
|||
|
}
|