如何将Identity Server与.NET Core 2.1配合使用?

时间:2018-08-07 14:11:19

标签: c# asp.net-core identityserver4

我正在尝试让Identity Server在ASP.NET Core 2.1项目上工作,我遵循了here的说明,但是,我意识到这些是针对ASP.NET Core 2.0的。

MVC客户端中的启动看起来像这样:

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");
    });

使用ASP.NET Core 2.1,可以在这里访问身份组件:http://localhost/Identity/Account/Login。上面的代码将重定向到:http://localhost/Account/Login。我的第一个想法是替换以下行:

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

具有:

options.Authority = "http://localhost:5000/Identity";

但是,我然后收到一条错误消息:

  

IOException:IDX10804:无法从“ http://localhost:5000/Identity/.well-known/openid-configuration”检索文档。”

这是因为路径必须为:'http://localhost:5000/.well-known/openid-configuration'。

我可以通过路由解决此问题吗?我相信,如果我确保所有对http://localhost:5000/Account/Login的请求都映射到http://localhost:5000/Identity/Account/Login,那么它将解决此问题。这是正确的,路线会是什么样?我无法获得使用区域(身份)的途径。

2 个答案:

答案 0 :(得分:5)

使用OpenID Connect时,没有在Web应用程序上具有登录表单。您正在将登录职责委托给OpenID Connect提供程序。您的情况就是IdentityServer,它在单独的应用程序中运行。

因此,您不需要在此处配置您的Web应用程序:权限 是IdentityServer的根URL,因此"http://localhost:5000"应该在那里正确。相反,您需要配置的是IdentityServer,以便在收到授权请求而无需用户登录的情况下将其重定向到正确的端点。

您可以在IdentityServer应用程序的Startup中添加服务:

services.AddIdentityServer(options =>
{
    options.UserInteraction.LoginUrl = "/Identity/Account/Login";
    options.UserInteraction.LogoutUrl = "/Identity/Account/Logout";
})

答案 1 :(得分:0)

不确定是否有帮助,但是我在Net Core 2.1身份实现方面遇到了麻烦(“登录/注销”页面并不总是出现),需要在Startup.cs中添加默认身份,如下所示:

   // Identity Context
        services.AddDbContext<ApplicationDbContext>(options =>
        {
            options.UseSqlServer(Configuration["DefaultConnection"],
                                sqlOptions => sqlOptions.MigrationsAssembly(typeof(Startup).GetTypeInfo().
                                Assembly.GetName().Name));
        },
            ServiceLifetime.Scoped
        );

        // Configure default Identity implementation
        services.AddDefaultIdentity<ApplicationUser>()
            .AddEntityFrameworkStores<ApplicationDbContext>()
            .AddDefaultUI()
            .AddDefaultTokenProviders()
            .AddEntityFrameworkStores<ApplicationDbContext>();

以前的版本(Net Core 2.0)目前已经到期(https://blogs.msdn.microsoft.com/dotnet/2018/06/20/net-core-2-0-will-reach-end-of-life-on-september-1-2018/),因此不会期望找到许多托管应用程序的GitHub存储库,而这些存储库只能使用Net Core 2.0进行编译,构建和使用。 IdentityServer当前是唯一使用Open ID Connect和OAuth2为单点登录(SSO)提供令人满意的最佳实践身份验证/授权框架的开源应用程序;-)