.Net Core OpenIDConect с использованием стороннего поставщика

#c# #.net-core #model-view-controller #openid-connect

Вопрос:

Я в деле .Net core 3.1 , используя OpenIdConnect для аутентификации, вот мой startup.cs

   public void ConfigureServices(IServiceCollection services)
        {
           
            services.AddAuthentication(options =>
            {
                options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
                options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
            })
           .AddCookie()
           .AddOpenIdConnect("test",o =>
           {
               o.SignInScheme = "Cookies";
               o.SignOutScheme = "Cookies";
               o.ClientId = "test";
               o.ClientSecret = "gs";
               o.Authority = "https://test";
               o.ResponseType = OpenIdConnectResponseType.CodeIdToken;
             o.MetadataAddress = "https://test/.well-known/openid-configuration";
              o.SaveTokens = true;
               o.GetClaimsFromUserInfoEndpoint = true;
               o.Scope.Add("openid");
               o.Scope.Add("profile");
           });


            services.AddControllersWithViews();
            services.AddRazorPages();
        }
 

Вот мой домашний контроллер и логин действия с атрибутом [Авторизация]

  [Authorize]
    public IActionResult Login()
    {
      
        return View();
    }
 

Кнопка входа находится в индексе домашней папки.cshtml

 <a asp-controller="Home" asp-action="Login" target="_self" role="menuitem" class="btn btn-primary" type="button" id="btnLogin" aria-label="Log in to your account">LogIn</a>
 

Когда я нажимаю на кнопку входа в систему, это ошибка:

Веб-страница для веб-адреса не найдена: https://localhost:34343/Account/Login?Возврат = /Home/Login

Почему он пытается перейти в учетную запись/Войти в систему ?

Ответ №1:

Попробуйте заменить

 options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
 

Автор:

 options.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme;
 

Комментарии:

1. не-аутентификациясхема-была-указана-и-не-было-по умолчанию-challengescheme, это ошибка

2. Не удалось заставить OpenID работать с сервером идентификации третьей части. Какие-нибудь советы ?

3. так что добавьте это : опции. DefaultAuthenticateScheme = CookieAuthenticationDefaults. Схема аутентификации;

4. Это сообщение об ошибке «Исключение InvalidOperationException: не была указана схема аутентификации, и не была найдена схема DefaultChallengeScheme. Схемы по умолчанию могут быть установлены с помощью либо дополнительной проверки подлинности(строка defaultScheme), либо дополнительной проверки подлинности(Действие<Параметры проверки подлинности> Параметры конфигурации).»

5. вот как мой startup.cs выглядит как сервисы. Проверка подлинности(параметры => { параметры. DefaultScheme = CookieAuthenticationDefaults. Схема аутентификации; параметры. DefaultAuthenticateScheme = CookieAuthenticationDefaults. Схема аутентификации; параметры. DefaultChallengeScheme = OpenIdConnectDefaults. Схема аутентификации; })