Как правильно реализовать Google Open ID Connect с .NET Core 2.1? - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь изучить параметры проверки подлинности ядра ASP.NET, пройдя обучение Pluralsight. В этом обучении они используют Azure для аутентификации.

Я хочу использовать Google. Вот код для добавления Google Auth:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddAuthentication(options =>
        {
            options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
        })
        .AddOpenIdConnect(options =>
        {
            _configuration.Bind("Google", options);
        })
        .AddCookie();

        services.AddSingleton<IGreeter, Greeter>(); // Dependency Injection for custom service Greeter
        services.AddDbContext<OdeToFoodDbContext>(options => options.UseSqlServer(_configuration.GetConnectionString("OdeToFood")));
        services.AddScoped<IRestaurantData, SqlRestaurantData>(); // scoped to http transaction, dbcontext is not thread safe
        services.AddMvc();
    }

В appsettings.json я определил это:

{
    "Google": {
        "ClientId": "234092845903-n92krp955lrp46mdf445g5vo0sqp2eks.apps.googleusercontent.com",
        "ClientSecret": "bRg1flFud87hfsef89jMKoGW"
    },
    "Greeting":  "Hello from appsettings.json !!",
    "ConnectionStrings": {
        "OdeToFood": "Server=(localdb)\\MSSQLLocalDB;Database=OdeToFood;Trusted_Connection=True;MultipleActiveResultSets=true"
    }
}

Однако, когда я запускаю приложение, вместо экрана входа в систему Google появляется сообщение об ошибке:

Произошло необработанное исключение при обработке запроса. InvalidOperationException: предоставить полномочия, MetadataAddress, Configuration или ConfigurationManager для OpenIdConnectOptions Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectOptions.Validate ()


InvalidOperationException: предоставить полномочия, MetadataAddress, Configuration или ConfigurationManager для OpenIdConnectOptions Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectOptions.Validate () Microsoft.AspNetCore.Authentication.RemoteAuthenticationOptions.Validate (строковая схема) Microsoft.AspNetCore.Authentication.AuthenticationHandler.InitializeAsync (схема AuthenticationScheme, контекст HttpContext) Microsoft.AspNetCore.Authentication.AuthenticationHandlerProvider.GetHandlerAsync (контекст HttpContext, проверка подлинности строкиScheme) Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke (контекст HttpContext) Microsoft.AspNetCore.StaticFiles.StaticFileMiddleware.Invoke (контекст HttpContext) Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke (контекст HttpContext)

Что я делаю не так?

ClientID и ClientSecret определяются в консоли разработчика Google.

1 Ответ

0 голосов
/ 04 сентября 2018

Добавьте этот метод в класс запуска.

services.AddAuthentication().AddGoogle(googleOptions => { googleOptions.ClientId = Configuration["Authentication:Google:ClientId"]; googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; });

...