在 ASP.NET Core RC2 中使用 AddAuthentication 时的不明确调用

Posted

技术标签:

【中文标题】在 ASP.NET Core RC2 中使用 AddAuthentication 时的不明确调用【英文标题】:Ambiguous calls when using AddAuthentication in ASP.NET Core RC2 【发布时间】:2016-09-18 17:32:36 【问题描述】:

我已经安装了 asp.net core rc 2。我正在尝试创建 jwt 令牌身份验证。在 rc 1 中,所有工作人员都非常好。即使你创建一个标准项目,他也没有启动,因为有错误=( 纠正错误,我在 startup.cs 中添加代码:

  public void ConfigureServices(IServiceCollection services)
    
        // Add framework services.
        services.AddApplicationInsightsTelemetry(Configuration);
        var connection = "Data Source=DESKTOP-R3AP4AT\\SQLEXPRESS;Initial Catalog=Guide;Integrated Security=True;Connect Timeout=15;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False";
        services.AddDbContext<GuideContext>(options => options.UseSqlServer(connection));
        services.AddAuthentication();
        services.AddMvc();
    

在 project.json 库中添加:

"AspNet.Security.OpenIdConnect.Server": "1.0.0-beta4",

出现错误: 所有project.json:

    
  "dependencies": 
    "Microsoft.NETCore.App": 
      "version": "1.0.0-rc2-3002702",
      "type": "platform"
    ,
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Razor.Tools": 
      "version": "1.0.0-preview1-final",
      "type": "build"
    ,
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview1-final",
    "Microsoft.AspNet.Authentication": "1.0.0-rc1-final",
    "Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0-rc2-final",
    "Microsoft.AspNet.Security.OpenIdConnect" :  "1.0.0-beta3" 

  ,

  "tools": 
    "Microsoft.EntityFrameworkCore.Tools": 
      "version": "1.0.0-preview1-final",
      "imports": [
        "portable-net45+win8+dnxcore50",
        "portable-net45+win8"
      ]
    ,
    "Microsoft.AspNetCore.Razor.Tools": 
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    ,
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": 
      "version": "1.0.0-preview1-final",
      "imports": "portable-net45+win8+dnxcore50"
    
  ,

  "frameworks": 
    "netcoreapp1.0": 
      "imports": [
        "dotnet5.6",
        "dnxcore50",
        "portable-net45+win8"
      ]
    
  ,

  "buildOptions": 
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  ,

  "runtimeOptions": 
    "gcServer": true
  ,

  "publishOptions": 
    "include": [
      "wwwroot",
      "Views",
      "appsettings.json",
      "web.config"
    ]
  ,

  "scripts": 
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ],
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
  

【问题讨论】:

【参考方案1】:

不要将不同的 RC 版本混在一起。您的 project.json 混合了 RC1 和 RC2 模块。

它们都必须是 RC2,否则将无法正常工作。从旧版本到新版本有十几个重大变化。

"Microsoft.AspNet.Authentication": "1.0.0-rc1-final",
"Microsoft.AspNet.Security.OpenIdConnect" :  "1.0.0-beta3",
"AspNet.Security.OpenIdConnect.Server": "1.0.0-beta4"

这些行是错误的,它们是过时的包。

"Microsoft.AspNetCore.Authentication": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Authentication.OpenIdConnect" :  "1.0.0-rc2-final",
"AspNet.Security.OpenIdConnect.Server": "1.0.0-beta5-final"

应该可以。

【讨论】:

仅供参考,最新版本的 ASOS 完全支持 RC2:nuget.org/packages/AspNet.Security.OpenIdConnect.Server/…。 @alexqq 不客气 ;) 由于您正在迁移到 ASOS beta5,您可能会对这个其他 SO 问题感兴趣:***.com/q/37335676/542757。 @Pinpoint,谢谢)),但是我看不懂示例MVC.Server =(我希望将来会出现文档,因为在一个示例中理解新事物非常困难=(我需要像旧的 jwt auth 这样的简单授权,她工作得很好。现在在 RC 2 中,我尝试实现 OpenIdConnectServerProvider,但我有很多错误,例如“无法解析符号 ValidateClientAuthenticationContext”=(我想在 asp 上写我的文凭。 net core ,但也许我会写在 asp.net mvc 5=(。感谢您的帮助,对不起我的英语,我来自乌克兰) @alexqq 许多事情在 ASOS beta5 中发生了变化,大部分事件已被重命名/拆分/合并。既然我确定这将是一个常见问题,请随时提出一个新问题,我会发布一个答案,提及如何从旧事件迁移到新事件;) @Pinpoint 你不建议使用 jwt 令牌,我会听你的))我非常想详细说明如何使用不透明令牌和为支持不透明令牌而开发的新 OAuth2 验证中间件未来)我的问题是新版本中发送请求是否发生了变化?应该发送什么数据来接收令牌?

以上是关于在 ASP.NET Core RC2 中使用 AddAuthentication 时的不明确调用的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ASP.NET core rc2 中禁用浏览器缓存?

ASP.NET Core RC2 IIS 在选项请求上返回 502

ASP.NET Core RC2 Jwt 令牌 KID 错误

ASP.NET Core RC2 中的依赖注入失败

Razor 页面在 ASP.NET Core RC2 运行时看不到引用的类库

如何使用 ASP.NET Core RC2 MVC6 和 IIS7 获取当前 Windows 用户