Authorization 如何修复';客户端id缺失或太长';尝试从asp.net core 2.2 web应用程序登录时

Authorization 如何修复';客户端id缺失或太长';尝试从asp.net core 2.2 web应用程序登录时,authorization,identityserver4,asp.net-core-2.2,Authorization,Identityserver4,Asp.net Core 2.2,我正在设置我的身份服务器,以便从临时ip端口获得访问权限。当我在本地运行所有东西时,登录都能正常工作,但当我开始使用我的公共IP时,它表示我的客户端id丢失或太长 首先,我得到一个错误,它无法访问本地http请求。这是因为端点没有使用正确的重定向URI。我通过更改identityserver的公共源代码来改变这一点 之后,我可以进入我的登录页面并尝试登录以获得错误 抱歉,出现错误:请求无效 无效的客户端id 我检查了客户id,但它是正确的。 在控制台里我得到 fail: IdentityServ

我正在设置我的身份服务器,以便从临时ip端口获得访问权限。当我在本地运行所有东西时,登录都能正常工作,但当我开始使用我的公共IP时,它表示我的客户端id丢失或太长

首先,我得到一个错误,它无法访问本地http请求。这是因为端点没有使用正确的重定向URI。我通过更改identityserver的公共源代码来改变这一点

之后,我可以进入我的登录页面并尝试登录以获得错误

抱歉,出现错误:请求无效 无效的客户端id

我检查了客户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服务来自我的identity server,我在其中将端点位置更改为我的公共IP:

services.AddIdentityServer(选项=>options.PublicOrigin=”http://public-endpoint")
.AddSigningCredential(新的X509Certificate2(AppDomain.CurrentDomain.BaseDirectory+“Configuration/pokemon.pfx”,“secretpassword”))。AddResourceOwnerValidator()
.AddConfigurationStore(options=>options.ConfigureDbContext=builder=>builder.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),dboptions=>dboptions.MigrationAssembly(assembly)))
.AddOperationalStore(options=>options.ConfigureDbContext=builder=>builder.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),dboptions=>dboptions.migrationassembly(assembly)))
.addAsNetIdentity();
这是我的web项目的onconfigure:

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
services.AddAuthentication(选项=>{
options.DefaultScheme=“Cookies”;
options.DefaultChallengeScheme=“oidc”;
}).AddCookie(“Cookies”).AddOpenIdConnect(“oidc”,openid=>{
openid.signnscheme=“Cookies”;
openid.AuthenticationMethod=Microsoft.AspNetCore.Authentication.OpenIdConnect.OpenIdConnectRedirectBehavior.FormPost;
openid.Authority=”http://public-endpoint/";
openid.RequireHttpsMetadata=false;
openid.claims.Add(新的RoleClaimAction());
openid.ClientId=“口袋妖怪代码”;
openid.ClientSecret=“secret”;
openid.ResponseType=“id\u令牌代码”;
openid.Scope.Add(“口袋妖怪”);
openid.Scope.Add(“角色”);
openid.Scope.Add(“脱机访问”);
openid.Scope.Add(“电子邮件”);
openid.TokenValidationParameters=新的Microsoft.IdentityModel.Tokens.TokenValidationParameters
{
RoleClaimType=“角色”,
NameClaimType=“角色”
};
openid.GetClaimsFromUserInfoEndpoint=true;
openid.SaveTokens=true;
});
我希望该网站登录请求使用帐户详细信息的许可。但现在我得到了一个错误: 抱歉,出现错误:请求无效 无效的客户端id”。
我是identity server的新手,所以我错过了什么吗?

openid.ClientId=“pokemon\u code”不存在或未针对配置数据库中的openid流进行配置是最常见的。还要确保请求
openid
scope
openid.scope.Add(“openid”)clientid是正确的,它使用与我脱机运行时相同的数据库连接。我不知道我是否需要做很多改变才能与我的公众接触到它。我更改了重定向uri。但这很有效。还添加了
openid.Scope.Add(“openid”)
看不到太大的差异。根据我的经验,当客户端或作用域无效时,登录页根本不会显示。因此,问题不在这里。似乎更多的是编码问题,导致解码正文时出现问题。您可以尝试删除
openid.AuthenticationMethod
行,或者检查表单的编码。我删除了
openid.AuthenticationMethod
但它仍然是一样的。但是表单怎么可能仍然是IdentityServer的快速启动模板,并且在本地工作良好。因此编码不应该不同,对吗?似乎是重定向问题。提交登录表单后,您必须转到[HttpPost]帐户控制器中的登录操作,但您似乎重复跳转到授权端点。为什么?请检查控制器上是否存在[AllowAnonymous]。完整的(调试级别)idsrv日志可能有助于区分问题
openid.ClientId=“pokemon\u code";不存在或未针对配置数据库中的openid流进行配置是最常见的。还要确保请求
openid
scope
openid.scope.Add(“openid”)clientid是正确的,它使用与我脱机运行时相同的数据库连接。我不知道我是否需要做很多改变才能与我的公众接触到它。我更改了重定向uri。但这很有效。还添加了
openid.Scope.Add(“openid”)
看不到太大的差异。根据我的经验,当客户端或作用域无效时,登录页根本不会显示。因此,问题不在这里。似乎更多的是编码问题,导致解码正文时出现问题。您可以尝试删除
openid.AuthenticationMethod
行,或者检查表单的编码。我删除了
openid.AuthenticationMethod
但它仍然是一样的。但是表单怎么可能仍然是IdentityServer的快速启动模板,并且在本地工作良好。因此编码不应该不同,对吗?似乎是重定向问题。提交登录表单后,您必须转到[HttpPost]帐户控制器中的登录操作,但您似乎可以重复跳转到授权终结点。为什么?请检查控制器上是否存在[AllowAnonymous]。完整(调试级别)的idsrv日志可能会