2017-07-05 5 views
1

私はPostmanを使用して認証を試みるとエラーが発生します。私はそれを完全に追跡し、それはサインインして成功するが、チケットを返すことに失敗する。次のようにJWT OpenIddictとASP.Net Core 500内部サーバーエラー

DEBUGログは次のとおりです。

System.InvalidOperationException: No authentication handler is configured to handle the scheme: ASOS 
 
    at Microsoft.AspNetCore.Http.Authentication.Internal.DefaultAuthenticationManager.<SignInAsync>d__14.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Mvc.SignInResult.<ExecuteResultAsync>d__14.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeResultAsync>d__30.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResultFilterAsync>d__28.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResultExecutedContext context) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeNextResourceFilter>d__22.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ResourceExecutedContext context) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted) 
 
    at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.<InvokeAsync>d__20.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Builder.RouterMiddleware.<Invoke>d__4.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Cors.Infrastructure.CorsMiddleware.<Invoke>d__7.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at System.Runtime.CompilerServices.TaskAwaiter.GetResult() 
 
    at Angular2WebpackVisualStudio.Startup.<>c__DisplayClass5_0.<<Configure>b__0>d.MoveNext() in C:\Users\mhorton.NRH\Documents\Visual Studio 2017\Projects\AngularWebpackVisualStudio-master\src\AngularWebpackVisualStudio\Startup.cs:line 98 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Server.IISIntegration.IISMiddleware.<Invoke>d__8.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Hosting.Internal.RequestServicesContainerMiddleware.<Invoke>d__3.MoveNext() 
 
--- End of stack trace from previous location where exception was thrown --- 
 
    at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 
 
    at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
 
    at Microsoft.AspNetCore.Server.Kestrel.Internal.Http.Frame`1.<RequestProcessingAsync>d__2.MoveNext() 
 
Microsoft.AspNetCore.Hosting.Internal.WebHost:Information: Request finished in 1950.2099ms 500

そして、ここでは私のStartup.csです。私はエラーがStartup.csにあると思うし、私はそれを完全に理解していないことを自認している。

私はIdentityContext経由でアクセスされるASP.Net Identity Core SQL DBに対して認証しています。トレース中にこのDBからの情報は正常ですので、その部分が適切に動作していると確信しています。 OpenIddictを使用して自己署名証明書を使ってJWTトークンを発行しようとしています。このトークンをAngular4アプリで使用して、同じサーバー上のAPIにアクセスしたいと考えています。

using System; 
 
using System.Linq; 
 
using Microsoft.AspNetCore.Builder; 
 
using Microsoft.AspNetCore.Http; 
 
using Microsoft.AspNetCore.Hosting; 
 
using Microsoft.EntityFrameworkCore; 
 
using Microsoft.Extensions.Configuration; 
 
using Microsoft.Extensions.DependencyInjection; 
 
using Microsoft.Extensions.Logging; 
 
using Angular2WebpackVisualStudio.Repositories.Things; 
 
using Angular2WebpackVisualStudio.Models; 
 
using AngularWebpackVisualStudio.DBContexts; 
 
using AngularWebpackVisualStudio.Models; 
 
using Microsoft.AspNetCore.Identity.EntityFrameworkCore; 
 
using System.Security.Cryptography.X509Certificates; 
 
using Microsoft.AspNetCore.Identity; 
 
using AngularWebpackVisualStudio.Shared; 
 

 
namespace Angular2WebpackVisualStudio 
 
{ 
 
    public class Startup 
 
    { 
 

 
     public Startup(IHostingEnvironment env) 
 
     { 
 
      var builder = new ConfigurationBuilder() 
 
       .SetBasePath(env.ContentRootPath) 
 
       .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
 
       .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
 
       .AddEnvironmentVariables(); 
 
      Configuration = builder.Build(); 
 
     } 
 

 
     public IConfigurationRoot Configuration { get; } 
 

 
     // This method gets called by the runtime. Use this method to add services to the container. 
 
     public void ConfigureServices(IServiceCollection services) 
 
     { 
 
      services.AddCors(options => 
 
      { 
 
       options.AddPolicy("AllowAllOrigins", 
 
        builder => 
 
        { 
 
         builder 
 
          .AllowAnyOrigin() 
 
          .AllowAnyHeader() 
 
          .AllowAnyMethod(); 
 
        }); 
 
      }); 
 
     
 
      var jwtSigningCert = new X509Certificate2(@"C:\Program Files (x86)\Windows Kits\10\bin\10.0.15063.0\x64\SIWWW.pfx", "Test123"); 
 
      services.AddOpenIddict() 
 
       .AllowAuthorizationCodeFlow() 
 
       .AddEntityFrameworkCoreStores<IdentityContext>() 
 
       .EnableTokenEndpoint("/oauth2/token") 
 
       .EnableAuthorizationEndpoint("/connect/token") 
 
       .UseJsonWebTokens() 
 
       .AllowPasswordFlow() 
 
       .DisableHttpsRequirement() 
 
       .AddSigningCertificate(jwtSigningCert); 
 

 
      services.AddMvc(); 
 

 
      services.AddDbContext<IdentityContext>(options => 
 
      { 
 
       options.UseSqlServer(Configuration.GetSection("ConnectionStrings")["DefaultConnection"]); 
 
       options.UseOpenIddict(); 
 
      }); 
 
      services.AddIdentity<ApplicationUser, IdentityRole>() 
 
       .AddEntityFrameworkStores<IdentityContext>() 
 
       .AddDefaultTokenProviders(); 
 

 
      services.AddScoped<IPasswordHasher<ApplicationUser>, SqlPasswordHasher>(); 
 

 
     } 
 

 
     // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. 
 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
 
     { 
 
      loggerFactory.AddConsole(Configuration.GetSection("Logging")); 
 
      loggerFactory.AddDebug(); 
 

 
      var angularRoutes = new[] { 
 
       "/home", 
 
       "/about", 
 
       "/contact", 
 
       "/login" 
 
      }; 
 

 
      app.Use(async (context, next) => 
 
      { 
 
       if (context.Request.Path.HasValue && null != angularRoutes.FirstOrDefault(
 
        (ar) => context.Request.Path.Value.StartsWith(ar, StringComparison.OrdinalIgnoreCase))) 
 
       { 
 
        context.Request.Path = new PathString("/"); 
 
       } 
 

 
       await next(); 
 
      }); 
 

 
      app.UseCors("AllowAllOrigins"); 
 

 
      app.UseDefaultFiles(); 
 
      app.UseStaticFiles(); 
 
      app.UseIdentity(); 
 
      app.UseOAuthValidation(); 
 
      app.UseJwtBearerAuthentication(new JwtBearerOptions() 
 
      { 
 
       Audience = "414e1927a3884f68abc79f7283837fd1", 
 
       Authority = "localhost:5000", 
 
       AutomaticAuthenticate = true, 
 
       RequireHttpsMetadata = false 
 
      }); 
 

 
      app.UseMvc(routes => 
 
      { 
 
       routes.MapRoute(
 
        name: "default", 
 
        template: "{controller=Home}/{action=Index}/{id?}"); 
 
      }); 
 
     } 
 
    } 
 
}

感謝すべてのヘルプ。

答えて

0

When I use Postman to try authentication I get an error. I trace it all the way through and it does the signin and succeeds but then fails returning the ticket.

あなたはapp.UseOpenIddict();app.UseIdentity();(必ずしもapp.UseMvc();前)を追加する必要があります。

+0

私は400不正なレスポンス 'エラーが出ることを行うと: ましたerror_description INVALID_REQUEST:必須「のclient_id」パラメータが missing.'であると私はデバッグする場合、それはあなたに/接続/トークンコントローラ –

+0

に達することはありません例えば、 '/ connect/token'は認証エンドポイントに割り当てられたアドレスです。この場合、 'client_is'はあなたが見ているエラーが示すように、必須のパラメータです。あなたはどんな流れを使っていますか? – Pinpoint

+0

正直な答えは、私が何をしているのかよく分かりません。もし私が何をしようとしているのかを教えれば、私がやるべきことであなたを助けることができるかもしれません。 –

関連する問題