Fake Authentication

Run Settings
LanguageC#
Language Version
Run Command
using System; using System.Collections.Generic; using System.Security.Claims; using System.Text.Encodings.Web; using System.Threading.Tasks; using leetcoin_api; using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; namespace Microsoft.Extensions.DependencyInjection { public static class FakeAuthenticationExtensions { public static AuthenticationBuilder AddFakeAuthentication(this AuthenticationBuilder builder) => builder.AddFakeAuthentication(FakeAuthenticationDefaults.AuthenticationScheme, _ => { }); public static AuthenticationBuilder AddFakeAuthentication(this AuthenticationBuilder builder, Action<FakeAuthenticationOptions> configureOptions) => builder.AddFakeAuthentication(FakeAuthenticationDefaults.AuthenticationScheme, configureOptions); public static AuthenticationBuilder AddFakeAuthentication(this AuthenticationBuilder builder, string authenticationScheme, Action<FakeAuthenticationOptions> configureOptions) => builder.AddFakeAuthentication(authenticationScheme, displayName: null, configureOptions: configureOptions); public static AuthenticationBuilder AddFakeAuthentication(this AuthenticationBuilder builder, string authenticationScheme, string displayName, Action<FakeAuthenticationOptions> configureOptions) { builder.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IPostConfigureOptions<FakeAuthenticationOptions>, FakeAuthenticationPostConfigureOptions>()); return builder.AddScheme<FakeAuthenticationOptions, FakeAuthenticationHandler>(authenticationScheme, displayName, configureOptions); } } } namespace leetcoin_api { public static class FakeAuthenticationDefaults { public const string AuthenticationScheme = "FakeAUTH"; } public class FakeAuthenticationOptions : AuthenticationSchemeOptions { public IEnumerable<Claim> Claims { get; set; } } public class FakeAuthenticationPostConfigureOptions : IPostConfigureOptions<FakeAuthenticationOptions> { public void PostConfigure(string name, FakeAuthenticationOptions options) { // } } public class FakeAuthenticationValidatedContext : ResultContext<FakeAuthenticationOptions> { public FakeAuthenticationValidatedContext(HttpContext context, AuthenticationScheme scheme, FakeAuthenticationOptions options) : base(context, scheme, options) { } } public class FakeAuthenticationHandler : AuthenticationHandler<FakeAuthenticationOptions> { public FakeAuthenticationHandler(IOptionsMonitor<FakeAuthenticationOptions> options, ILoggerFactory logger, UrlEncoder encoder, ISystemClock clock) : base(options, logger, encoder, clock) { } protected override Task<AuthenticateResult> HandleAuthenticateAsync() { var claims = Options.Claims ?? new Claim[] { new Claim("name", "Fake user") }; var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity[]{ new ClaimsIdentity(claims, FakeAuthenticationDefaults.AuthenticationScheme) }); var properties = new AuthenticationProperties() { ExpiresUtc = DateTime.Now.AddYears(1) }; var authenticationTicket = new AuthenticationTicket(claimsPrincipal, properties, FakeAuthenticationDefaults.AuthenticationScheme); var context = new FakeAuthenticationValidatedContext(Context, Scheme, Options); context.Principal = claimsPrincipal; context.Success(); return Task.FromResult(context.Result); } } }
public class Startup { public void ConfigureServices(IServiceCollection services) { //// Snip services.AddAuthentication(FakeAuthenticationDefaults.AuthenticationScheme) .AddFakeAuthentication(x => { x.Claims = new System.Security.Claims.Claim[] { new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Name, "User 1"), new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Role, "Admin"), new System.Security.Claims.Claim(System.Security.Claims.ClaimTypes.Email, "derp@derp.se"), new System.Security.Claims.Claim(JwtOptions.TraderIdClaimName, "ae1c1c9e-0ef3-4663-b0f6-9fbff1d46089") }; }); } }
Editor Settings
Theme
Key bindings
Full width
Lines