private static bool AddGithubProvider(AuthenticationBuilder authBuilder, AuthConfigSection.AuthProvider provider) { if (provider?.Name?.ToLower() != "github") { return(false); } authBuilder.AddOAuth(provider.Name, options => { options.ClientId = provider.ClientId; options.ClientSecret = provider.ClientSecret; options.CallbackPath = new PathString(provider.CallbackPath); options.AuthorizationEndpoint = "https://github.com/login/oauth/authorize"; options.TokenEndpoint = "https://github.com/login/oauth/access_token"; options.UserInformationEndpoint = "https://api.github.com/user"; options.Scope.Add("user:email"); options.SaveTokens = true; options.ClaimActions.MapJsonKey(ClaimTypes.NameIdentifier, "id"); options.ClaimActions.MapJsonKey(ClaimTypes.Email, "email"); options.Events = new OAuthEvents { OnCreatingTicket = async context => { var request = new HttpRequestMessage(HttpMethod.Get, context.Options.UserInformationEndpoint); request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", context.AccessToken); var response = await context.Backchannel.SendAsync(request, HttpCompletionOption.ResponseHeadersRead, context.HttpContext.RequestAborted); response.EnsureSuccessStatusCode(); var json = JsonDocument.Parse(await response.Content.ReadAsStringAsync()); context.RunClaimActions(json.RootElement); } }; }); return(true); }
private static bool AddGoogleProvider(AuthenticationBuilder authBuilder, AuthConfigSection.AuthProvider provider) { if (provider?.Name?.ToLower() != "google") { return(false); } authBuilder.AddGoogle(options => { options.ClientId = provider.ClientId; options.ClientSecret = provider.ClientSecret; options.CallbackPath = new PathString(provider.CallbackPath ?? $"/signin-{provider.Name}"); }); return(true); }