2016-09-28 3 views
0

Ich habe Probleme mit Self-Hosting meiner Web-API in .NET Core. Es läuft gut auf IIS, aber ich bekomme Authentifizierungsfehler, wenn ich versuche, selbst zu hosten. Ich habe versucht, Cookie-Authentifizierung unter anderen Lösungen zu verwenden, aber vergeblich. Ich habe nur eine Route für den Moment, aber nachdem ich mehrere Haltepunkte gesetzt habe, ist mir aufgefallen, dass es nicht einmal den Konstruktor meines Controllers erreicht. Wenn jemand mir einen Hinweis auf eine Lösung geben könnte, würde ich es sehr schätzen :)Problem mit selbst-hosting Web-API mit .NET Core

Hier sind Ausschnitte meines Codes.

Startup.cs

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) 
{ 
    loggerFactory.AddConsole(this.Configuration.GetSection("Logging")); 
    loggerFactory.AddDebug(); 

    app.UseApplicationInsightsRequestTelemetry(); 

    app.UseApplicationInsightsExceptionTelemetry(); 

    app.UseMvc(); 
} 

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add framework services. 
    services.AddApplicationInsightsTelemetry(this.Configuration); 

    // Add the database used 
    services.AddDbContext<VaultContext>(options => options.UseSqlServer(this.Configuration.GetConnectionString("VaultDatabase"))); 

    // Add our repository type 
    services.AddScoped<VaultRepository, VaultRepository>(); 
    services.AddScoped<UserResolverService, UserResolverService>(); 
    services.AddScoped<PersonalizationServiceClient, PersonalizationServiceClient>(); 
    services.AddScoped<PersistenceToDataModelConverter, PersistenceToDataModelConverter>(); 

    services.AddMvc(config => 
    { 
     var policy = new AuthorizationPolicyBuilder() 
          .RequireAuthenticatedUser() 
          .Build(); 
     config.Filters.Add(new AuthorizeFilter(policy)); 
    }); 
} 

Die config-Lamda in der ‚‘ services.AddMvc ‚‘ ist die einzige ich, dass gefunden gearbeitet, dass der Anrufer gezwungen, seine Windows-Anmeldeinformationen zu geben, die ich später analysieren und anzeigen Informationen basierend auf seinem Profil. Wenn dies nicht der richtige Weg ist, bitte sag es mir.

Und meine Controller-Klasse

public VaultController(VaultRepository repository, UserResolverService currentuser, PersonalizationServiceClient personalizationService, PersistenceToDataModelConverter persistenceToDataModelConverter) 
{ 
    this.repository = repository; 
    this.currentuser = currentuser; 
    this.personalizationService = personalizationService; 
    this.persistenceToDataModelConverter = persistenceToDataModelConverter; 
} 

/// <summary> 
/// The get profile. 
/// </summary> 
/// <returns> 
/// The <see cref="IActionResult"/>. 
/// </returns> 
[HttpGet] 
[Route("/Profile")] 
[Produces(typeof(UserProfile))] 
public IActionResult SearchProfile() 
{ 
    try 
    { 
     if (!this.currentuser.IsAuthenticated) 
     { 
      throw new Exception("This service does not support anonymous calls."); 
     } 

     var profile = Task.Run(() => this.personalizationService.GetUserProfileAsync(this.currentuser.GetCurrentWindowsIdentityName)).Result; 

     var userProfile = this.persistenceToDataModelConverter.Convert(profile); 
     userProfile.UserAdLogin = this.currentuser.GetCurrentWindowsIdentityName; 

     return this.Ok(userProfile); 
    } 
    catch (Exception ex) 
    { 
     return this.NotFound(ex); 
    } 
} 

ist hier der Fehler i

erhalten

enter image description here

Antwort

0

Sie erfordern eine Authentifizierung aber haben keine Auth-Middleware in Ihrer App, um sie zu behandeln. Sie müssen etwas wie UseCookieAuthentication oder UseJwtBearerAuthentication verwenden. Es schlägt in IIS nicht fehl, da II Middleware für Windows-Authentifizierung hinzufügt.

Verwandte Themen