Неизвестный клиент или у клиента не включен сервер идентификации 4

#c# #asp.net-mvc #asp.net-core #identityserver4

#c# #asp.net-mvc #asp.net-core #identityserver4

Вопрос:

Я получал эту ошибку, и я искал ответ в Интернете, и почти все они говорили о запросах, и я дважды проверил, чтобы убедиться, что мои uri настроены правильно. Я не нашел никакой подсказки по этому поводу. Есть мысли.

введите описание изображения здесь

Настройки сервера идентификации 4:-

   public static IEnumerable<Client> GetClients()
        {
            return new List<Client>()
            {
                new Client
                {
                    ClientName="KtsWeb App",
                    ClientId="ktswebclient",
                    AllowedGrantTypes= GrantTypes.Hybrid,
                    AccessTokenType = AccessTokenType.Reference,
                    RedirectUris = new List<string>()
                    {
                        "https://localhost:44355/signin-oidc" //Client URL Address

                    },
                    AllowedScopes =
                    {
                        IdentityServerConstants.StandardScopes.OpenId,
                        IdentityServerConstants.StandardScopes.Profile
                    }
                }
            };            
        }
  

Настройки клиента:-

 services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            }).AddCookie("Cookies",
              (options) =>
              {
                  options.AccessDeniedPath = "/Authorization/AccessDenied";
              })
              .AddOpenIdConnect("oidc", options =>
              {
                  options.SignInScheme = "Cookies";
                  options.Authority = "https://localhost:44380"; //Identity Server URL Address
                  options.ClientId = "ktswebclient";
                  options.ResponseType = "code id_token";
                  options.Scope.Add("openid");
                  options.Scope.Add("profile");
                  options.SaveTokens = true;
              });
  

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

1. Вставьте URL, на который происходит перенаправление, я бы поставил немного денег, что ваш uri перенаправления немного отличается или не https или что-то в этом роде.

2. Я не понял, о чем вы говорите, однако направленный uri — это домашняя страница сервера идентификации / страница ошибок, вот что на ней отображается сообщение об ошибке. Сервер идентификации нормально открывается со своим собственным uri, но клиент получает эту ошибку. Uri ошибки: localhost:44380/home/error?errorID=

3. Откройте инструменты разработчика в Chrome или что-то подобное и проверьте сетевой запрос, предназначенный для подключения / авторизации

4. 1. вы создали гибридный клиент без секрета клиента. 2. вы используете неявный клиентский код. Выберите один.

Ответ №1:

Вы всегда должны проверять журналы сервера идентификации, это выдало бы вам четкое сообщение об ошибке, вероятно, неподдерживаемый тип предоставления.

Вы создали гибридный клиент, но забыли добавить секрет.

 new Client
            {
                ClientId = "mvc",
                ClientName = "MVC Client",
                AllowedGrantTypes = GrantTypes.Hybrid,

                ClientSecrets =
                {
                    new Secret("secret".Sha256())
                },

                RedirectUris           = { "http://localhost:5002/signin-oidc" },
                PostLogoutRedirectUris = { "http://localhost:5002/signout-callback-oidc" },

                AllowedScopes =
                {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    "api1"
                },

                AllowOfflineAccess = true
            }
        };
  

Ваш код не предоставляет секрет

         JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();

        services.AddAuthentication(options =>
            {
                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";
            })
            .AddCookie("Cookies")
            .AddOpenIdConnect("oidc", options =>
            {
                options.SignInScheme = "Cookies";

                options.Authority = "http://localhost:5000";
                options.RequireHttpsMetadata = false;

                options.ClientId = "mvc";
                options.ClientSecret = "secret";
                options.ResponseType = "code id_token";

                options.SaveTokens = true;
                options.GetClaimsFromUserInfoEndpoint = true;

                options.Scope.Add("api1");
                options.Scope.Add("offline_access");

                options.ClaimActions.MapJsonKey("website", "website");
            });
  

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

1. Кажется, я пропустил секрет клиента, однако я также установил некоторые дополнительные настройки. Спасибо