2016-09-28 1 views
0

je ne parviens pas à l'auto-hébergement de mon API Web dans .NET de base. Il fonctionne bien sur IIS mais j'obtiens des erreurs d'authentification lorsque j'essaie d'auto-héberger. J'ai essayé d'utiliser l'authentification de cookie parmi d'autres solutions mais en vain. Je n'ai que 1 route pour le moment mais après avoir mis plusieurs points d'arrêt j'ai remarqué qu'il n'atteint même pas le constructeur de mon controlelr. Si quelqu'un pouvait me donner une idée d'une solution, je serais très heureux :)Trouble with API web auto-hébergement avec .NET de base

Voici quelques extraits de mon code.

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)); 
    }); 
} 

Le lamda config dans le « » services.AddMvc « » est le seul que j'ai trouvé qui a travaillé qui a forcé l'appelant à donner ses lettres de créance de Windows que je vais analyser et afficher plus tard informations basées sur son profil. Si ce n'est pas la bonne façon de le faire, dites-le moi s'il vous plaît.

Et ma classe contrôleur

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); 
    } 
} 

Voici l'erreur que je reçois

enter image description here

Répondre

0

Vous nécessitent une authentification mais ne pas middleware auth dans votre application pour gérer. Vous devez utiliser quelque chose comme UseCookieAuthentication ou UseJwtBearerAuthentication. Il n'échoue pas dans IIS, car IIS ajoute un middleware pour l'authentification Windows.