【问题标题】:IdentityServer4 and ASP.NET Core 2.0IdentityServer4 和 ASP.NET Core 2.0
【发布时间】:2018-03-06 10:51:48
【问题描述】:

我一定错过了什么,但我看不到它。
我创建了一个新的“空”ASP.NET Core 2.0 项目
我添加了 EF Core 2.0 和 EF Core 2.0 Identity
然后我尝试添加 IdentityServer4 2.0 rc1 并收到包还原失败并显示以下错误消息:

还原 NuGet 包时出错:序列包含更多 多于一个匹配元素

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

这是 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 -售前 GET https://api.nuget.org/v3/registration3-gz-semver2/identityserver4.aspnetidentity/index.json 好的 https://api.nuget.org/v3/registration3-gz-semver2/identityserver4.aspnetidentity/index.json 484ms 恢复包 D:\ProtoTypes\IdentityServer4\IdentityServer4\IdentityServer4.csproj... Install-Package : 序列包含多个匹配元素 At 行:1 字符:1 + 安装包 IdentityServer4.AspNetIdentity -Version 2.0.0-rc1 -Pr ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [安装包],异常 + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand 已用时间:00:00:03.7728514 PM>

【问题讨论】:

  • 尝试重命名您的项目......也许是 MyIdentityServer4。这可能是由于您的项目与您正在安装的软件包之一 (IdentityServer4) 同名。
  • 对,现在我感觉自己像个完整的ID10T!谢谢@彼得

标签: asp.net entity-framework identityserver4 asp.net-core-2.0


【解决方案1】:

以下是将项目迁移到 asp.net core 2.0 的一些更改。 第1步: 从以下链接下载适用于 Visual Studio 2017 的 asp.net core 2.0 gx64x。https://www.microsoft.com/net/download/core 第2步: 从 Nuget 包或包管理器控制台下载 1-安装包 IdentityServer4 -版本 2.0.0 2-Install-Package 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 类中的更新 前: 公共静态无效主要(字符串[]参数) { var 主机 = 新的 WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup() 。建造(); 主机.运行(); } 后: 公共静态无效主要(字符串[]参数) { BuildWebHost(args).Run(); } 公共静态 IWebHost BuildWebHost(string[] args) => WebHost.CreateDefaultBuilder(args) .UseStartup() 。建造(); 第 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 步: 更改 sin Login.cshtml 文件 前: var loginProviders = SignInManager.GetExternalAuthenticationSchemes().ToList(); 后: var loginProviders = (await 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2018-03-28
    • 2021-04-11
    • 2019-07-19
    • 1970-01-01
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多