IdentityServer4和ASP.NET Core 2.0

IdentityServer4和ASP.NET Core 2.0

问题描述:

我必须错过一些东西,但我看不到它。
我创建了一个新的“空” ASP.NET 2.0的核心项目
我加入EF核2.0和EF核2.0身份
然后我尝试添加IdentityServer4 2.0 RC1和我得到一个包以下错误消息恢复失败:发生在还原的NuGet包IdentityServer4和ASP.NET Core 2.0

错误:序列中含有较多的 超过一个匹配元素

有一个在这个项目中没有代码,所以我完全糊涂了。

这里是的csproj文件:

<Project Sdk="Microsoft.NET.Sdk.Web"> 

    <PropertyGroup> 
    <TargetFramework>netcoreapp2.0</TargetFramework> 
    </PropertyGroup> 

    <ItemGroup> 
    <Folder Include="wwwroot\" /> 
    </ItemGroup> 

    <ItemGroup> 
    <PackageReference Include="IdentityServer4" Version="2.0.0-rc1-update1" /> 
    <PackageReference Include="IdentityServer4.AspNetIdentity" Version="2.0.0-rc1" /> 
    <PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore.Authentication.OpenIdConnect" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.0" /> 
    <PackageReference Include="NETStandard.Library" Version="2.0.0" /> 
    </ItemGroup> 
    <ItemGroup> 
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 
    <DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" /> 
    <DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> 
    </ItemGroup> 
</Project> 

下面是从包管理器控制台我到NuGet.org电话:

PM>安装,包装IdentityServer4.AspNetIdentity -Version 2.0.0 -rc1 -PRERELEASE GET https://api.nuget.org/v3/registration3-gz-semver2/identityserver4.aspnetidentity/index.json OK https://api.nuget.org/v3/registration3-gz-semver2/identityserver4.aspnetidentity/index.json 484ms恢复包 d:\原型\ IdentityServer4 \ IdentityServer4 \ IdentityServ er4.csproj ... 安装包:序列包含多个匹配元素在 行:1个字符:1 +安装包IdentityServer4.AspNetIdentity - 版本2.0.0-rc1 -Pr ... + ~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~ + CategoryInfo:NotSpecified:(:) [安装封装],异常 + FullyQualifiedErrorId:NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand 经过时间: 00:00:03.7728514 PM>

+0

尝试重命名您的项目...也许到MyIdentityServer4。这可能是由于您的项目与您正在安装的一个包(IdentityServer4)具有相同的名称。 – Peter

+0

对,现在我觉得自己是一个完整的ID10T!谢谢@彼得 –

以下是您将项目迁移到asp.net core 2.0的一些更改。 步骤1: 从以下链接下载适用于visual studio 2017的asp.net核心2.0 gx64x。 https://www.microsoft.com/net/download/core 第2步:从包装的NuGet或包管理器控制台 1 - 安装 - 包IdentityServer4 -Version 2.0.0 2,安装,包装IdentityServer4.AspNetIdentity -Version 2.0.0-RC1-UPDATE2

步骤 下载3: 在Csproj文件中更新一些代码。 之前: netcoreapp1.1 后: netcoreapp2.0

Before: 
<PackageReference Include="Microsoft.AspNetCore.Authentication.Cookies" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.Mvc" Version="1.1.2" /> 
<PackageReference Include="Microsoft.AspNetCore.Server.IISIntegration" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.Server.Kestrel" Version="1.1.1" /> 
<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="1.1.1" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="1.1.1" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="1.1.1" /> 
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="1.1.0" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Logging" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="1.1.1" /> 
<PackageReference Include="Microsoft.Extensions.Options.ConfigurationExtensions" Version="1.1.1" /> 
<PackageReference Include="Microsoft.VisualStudio.Web.BrowserLink" Version="1.1.0" /> 
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="1.1.0" /> 
After: 
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0" /> 

Before: 
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="1.0.0" /> 
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="1.0.0" /> 
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="1.0.0" /> 
  
After: 
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" /> 
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" /> 
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" /> 

步骤4:在Program.cs中类 更新之前: 公共静态无效的主要(字符串[]参数) { 变种宿主= new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() .Build(); 东道主。跑(); } After: public static void Main(string [] args) { BuildWebHost(args).Run(); } 公共静态IWebHost BuildWebHost(串[]参数)=> WebHost.CreateDefaultBuilder(参数) .UseStartup() .Build(); 步骤5: 更新在StartUp.cs

services.AddIdentityServer() 
        .AddDeveloperSigningCredential() 
        .AddInMemoryPersistedGrants() 
        .AddInMemoryIdentityResources(Config.GetIdentityResources()) 
        .AddInMemoryApiResources(Config.GetApiResources()) 
        .AddInMemoryClients(Config.GetClients()) 
        .AddAspNetIdentity<ApplicationUser>(); 

     Before: 
     app.UseIdentity(); 
     After: 
     app.UseAuthentication(); 

步骤6:变化管理登录视图模型

Before: 
public IList<AuthenticationDescription> OtherLogins { get; set; } 
  
After: 
public IList<AuthenticationScheme> OtherLogins { get; set; } 

步骤7: 变化管理器控制器

Before: 
var otherLogins = _signInManager 
                  .GetExternalAuthenticationSchemes() 
                  .Where(auth => userLogins 
                                 .All(ul => auth.AuthenticationScheme != ul.LoginProvider)) 
                  .ToList(); 
  
After: 
var otherLogins = (await _signInManager 
                   .GetExternalAuthenticationSchemesAsync()) 
                  .Where(auth => userLogins 
                                 .All(ul => auth.Name != ul.LoginProvider)) 
                  .ToList(); 

步骤8: 更改罪名Login.cshtml文件 之前: var loginP roviders = SignInManager.GetExternalAuthenticationSchemes()。ToList(); 之后: var loginProviders =(等待SignInManager.GetExternalAuthenticationSchemesAsync())。ToList();

Before: 
<button type="submit" class="btn btn-default" 
        name="provider" value="@provider.AuthenticationScheme" 
        title="Log in using your @provider.DisplayName account"> 
    @provider.AuthenticationScheme 
</button> 
  
After: 
<button type="submit" class="btn btn-default" 
        name="provider" value="@provider.Name" 
        title="Log in using your @provider.DisplayName account"> 
    @provider.Name 
</button>