具有EF标识数据库的Identity Server 4 - OpenID Connect失败

时间:2018-01-29 19:31:18

标签: asp.net-mvc entity-framework asp.net-identity identityserver4

请注意:此帖子中未解决此问题。我被要求创建一个新帖子。请参阅标题为:

的新帖子

带有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的位置。我的另一个问题是,当我使用我的电子邮件帐户登录时,为什么会这样?

enter image description here

enter image description here

enter image description here

这是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),请参见下图: enter image description here

来自AccountService的调试结果: enter image description here

在上下文客户端的客户端存储中有3个实例IdentityServer4.EntityFramework.Entities.Client。所有3个实例都将EnableLocalLogin设置为True。我在选择OpenID Connect选项后点击了断点。

我还在登录控制器的顶部设置了一个断点,它从未到达: enter image description here

2 个答案:

答案 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标识。