请注意:此帖子中未解决此问题。我被要求创建一个新帖子。请参阅标题为:
的新帖子带有EF身份数据库的Identity Server 4 - OpenID Connect Failing(1)
我有一个带有EF Identity DB的Identity Server 4解决方案。我可以使用我的电子邮件和外部Gmail帐户登录,但是当我尝试使用OpenID(用户名和密码)登录时,我收到以下错误。问题可能与存储在Identity DB表中的信息有关。我是Identity Server的新手,这是我第一次尝试使用EF Identity DB。我可以发布数据库信息,如果它有助于解决问题。
源代码: https://github.com/gotnetdude/GotNetDude-PublicRepository/tree/master/AuthServer
Identity Server日志文件: https://github.com/gotnetdude/GotNetDude-PublicRepository/blob/master/AuthServer_log.txt
MVC客户端日志: https://github.com/gotnetdude/GotNetDude-PublicRepository/blob/master/MVCClient_log.txt
任何建议将不胜感激。保罗
修改
请在下面找到身份表中的客户端配置信息。我不确定在DB中设置AllowedRedirectUris的位置。我的另一个问题是,当我使用我的电子邮件帐户登录时,为什么会这样?
这是AuthServer启动代码,我将oidc mvc客户端添加为失败的挑战选项(“OpenID Connect”)。如果我使用电子邮件凭据登录,MVC客户端工作正常。我想这与mvc客户端上处理作用域的方式有关。任何建议都表示赞赏。
services.AddAuthentication()
.AddGoogle("Google", options =>
{
options.ClientId = "434483408261-55tc8n0cs4ff1fe21ea8df2o443v2iuc.apps.googleusercontent.com";
options.ClientSecret = "3gcoTrEDPPJ0ukn_aYYT6PWo";
})
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
//options.Authority = "https://demo.identityserver.io/";
//options.ClientId = "implicit";
//options.SaveTokens = true;
options.Authority = "http://localhost:5000";
options.RequireHttpsMetadata = false;
options.SaveTokens = true;
options.ClientId = "mvc";
options.TokenValidationParameters = new TokenValidationParameters
{
NameClaimType = "name",
RoleClaimType = "role"
};
});
我正在尝试从MVC客户端(:5002)连接到权限(:5000),请参见下图:
在上下文客户端的客户端存储中有3个实例IdentityServer4.EntityFramework.Entities.Client。所有3个实例都将EnableLocalLogin设置为True。我在选择OpenID Connect选项后点击了断点。
答案 0 :(得分:0)
检查您提供的日志文件。您收到的错误是
redirect_uri无效:http://localhost:5000/signin-oidc。
如果您检查了客户端配置,则AllowedRedirectUris
包含http://localhost:5002/signin-oidc
。
您在端口中遇到(拼写错误)错误。它必须是5002
。
修改强>
根据您的屏幕截图和日志文件,您的客户端在Identity Server端正确配置。问题出在您的MVC客户端,而不是数据库中。你需要查看那里,找到你在启动客户端时设置的RedirectUrl
。
编辑2:
好的,看了你的代码后,我意识到@Ruard van Elburg告诉你的是造成这个问题的原因。使用内部身份验证时,您不需要像这样指定它(您真的很混淆Identity Server)。此规范仅适用于外部Oidc提供程序(例如Okta,或您拥有的任何其他Oidc提供程序)。检查here。您看到 - 身份服务器Startup.cs
不包含您拥有的此代码(第74到89行here)。为什么我们不一步一步地这样做。尝试删除我提到的行。
答案 1 :(得分:0)
我认为问题出现在AuthServer / Startup的行74中:
.AddOpenIdConnect("oidc", "OpenID Connect", options =>
{
...
options.ClientId = "mvc";
...
});
服务器不是 mvc客户端。我认为这是令人困惑的' IdentityServer。您不需要将oidc添加到服务器。如果删除这些行,那么它应该可以工作。
如果您从mvc客户端网站(:5002)登录,那么您应该被重定向。如果您登录IdentityServer(:5000),则不必重定向。服务器是权限,资源由范围和客户端由clientid标识。