Как исправить 'client_id отсутствует или слишком длинный' при попытке войти в систему из веб-приложения asp.net core 2.2 - PullRequest
0 голосов
/ 12 мая 2019

Я настраиваю свой идентификационный сервер для получения доступа от временного порта, перенаправленного ip.Логин работает отлично, когда я запускаю все локально, но когда я начинаю использовать свой общедоступный IP-адрес, он говорит, что мой client_id отсутствует или слишком длинный.

Сначала я получил ошибку, что не смог получить доступ к локальному http-запросу.Это произошло из-за того, что конечные точки не использовали правильный URI перенаправления.Я изменил это, изменив общедоступное происхождение сервера удостоверений.

После этого я смог зайти на свою страницу входа и попытаться войти в систему, чтобы получить ошибку

Извините, произошла ошибка: invalid_request Invalid client_id

Я проверил идентификатор клиента, но он правильный.В консоли я получаю

fail: IdentityServer4.Validation.AuthorizeRequestValidator[0]
      client_id is missing or too long
{
        "SubjectId": "anonymous",
        "RequestedScopes": "",
        "Raw": {
          "ReturnUrl": "/connect/authorize/callback?client_id=pokemon_code&redirect_uri=http%3A%2F%2Fbackendpokemonsite.azurewebsites.net%2Fsignin-oidc&response_type=id_token%20code&scope=openid%20profile%20pokemon%20role%20offline_access%20email&response_mode=form_post&nonce=636932445888919509.YTM5OTBlNDMtNWJkNC00MTJiLWI3YjAtNTIzMzY0ZmNkOGEyNzNlMjVhZjQtZGJhNC00MDk2LWIxYjItY2MwNWFmYTczNmU0&state=CfDJ8IxZ9MXLdlhLon2k58KSiTd3i19Dt1TM93X6-L-_SyUK_xpG5zn90n4y9RtMGlieCkdOPPnAg2VXrLoy1EXTZgGlLmsd7EIqORzq37XbF6Zj23rr7_shXOQcLY87Dywalv4VrRj6HKqUnNFGUE8cCKSXc6uiH0LDBTDPqAuU2QWWRJf-a07TAZw2YdbvanEbueXDKAL9ty57_O2pY1rS5_7ViiVVu_GP3ct8ytW6wY8_BBArqQZW7BspbQV5YzDfseVcSnh1dIRPXZTSvUyHWMvBIQTYb_xhctLoOpdzQC41XMCjP9lpkTBm2Vwv-izxlDWbT58DnVwNKnYTYUn0nhA",
          "Username": "username",
          "Password": "password",
          "button": "login",
          "__RequestVerificationToken": "CfDJ8N6qinc1TjFHrjbGhp-Exm0qSNXoKKJC77ipFBHfZWz2ukCowIEjgzRUy3ZRex2SEVLByyYCDoOfjxR-JUfdBj6IDUZAI5EHcFklOPLssWob-yJrrCio3VyrClZnlYkHSif3-yDvU0w-2GDs6S2lIKM",
          "RememberLogin": "false"
        }
      }
fail: IdentityServer4.Endpoints.AuthorizeEndpoint[0]
      Request validation failed

Мои службы onconfigure от моего сервера идентификации, где я меняю расположение конечных точек на мой публичный IP:

  services.AddIdentityServer(options=> options.PublicOrigin= "http://public-endpoint")
.AddSigningCredential(new X509Certificate2(AppDomain.CurrentDomain.BaseDirectory + "Configuration/pokemon.pfx","secretpassword"))                .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>()
                .AddConfigurationStore(options => options.ConfigureDbContext = builder => builder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), dboptions => dboptions.MigrationsAssembly(assembly)))
                .AddOperationalStore(options => options.ConfigureDbContext = builder => builder.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"), dboptions => dboptions.MigrationsAssembly(assembly)))
                .AddAspNetIdentity<IdentityUser>();

Это мой onconfigure для моего веб-проекта:

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
            services.AddAuthentication(options=> {

                options.DefaultScheme = "Cookies";
                options.DefaultChallengeScheme = "oidc";

            }).AddCookie("Cookies").AddOpenIdConnect("oidc",openid=> {
                openid.SignInScheme = "Cookies";
                openid.AuthenticationMethod = Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectRedirectBehavior.FormPost;
                openid.Authority = "http://public-endpoint/";
                openid.RequireHttpsMetadata = false;
                openid.ClaimActions.Add(new RoleClaimAction());
                openid.ClientId = "pokemon_code";
                openid.ClientSecret = "secret";
                openid.ResponseType = "id_token code";
                openid.Scope.Add("pokemon");
                openid.Scope.Add("role");
                openid.Scope.Add("offline_access");
                openid.Scope.Add("email");
                openid.TokenValidationParameters = new Microsoft.IdentityModel.Tokens.TokenValidationParameters
                {
                    RoleClaimType = "role",
                    NameClaimType="role"
                };
                openid.GetClaimsFromUserInfoEndpoint = true;
                openid.SaveTokens = true;
            });

Я ожидаю, что веб-сайт войдет в систему и запросит разрешение на использование данных учетной записи.но теперь я получаю сообщение об ошибке: «Извините, произошла ошибка: invalid_request Invalid client_id».Я довольно плохо знаком с сервером идентификации, так что я что-то пропустил?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...