2017-10-01 11 views
2

Ich habe eine vorhandene kleine App, die ich für den Test verwenden, es ist in Asp.Net Core 1.1 für sowohl die Web App als auch die API, die Authentifizierung ist getan mit Azure AD B2C. Ich versuche, es zu .NET Core 2.0 zu verschieben, aber ich kann nicht herausfinden, wie es funktioniert, habe ich versucht, beide Beispiel von GitHub Azure-Samples für Web App und API, aber ich habe entweder einen nicht autorisierten oder 500 Fehler wenn Versuchen Sie, auf die API zugreifen, wenn Sie ein funktionierendes Beispiel für den Aufruf einer Web-API aus einer Web-App mit 2.0 und geschützt durch AD B2C haben, wird es sehr geschätzt.Asp.Net Core 2.0 und Azure AD B2C zur Authentifizierung auf WebApp und API

Edit: Die Probe I-Test verwenden sind: Web App: WebApp-OpenIDConnect-DotNet core2.0 Web Api: B2C-WebApi core2.0 , Ich habe die appsettings Werte mein b2c-Verzeichnis übereinstimmen.

Für meine asp.net Core 1.1 Test App verwende ich die gleichen Proben wie oben, aber aus dem Master-Zweig, mit dem gleichen Wert für Appsettings.

Edit 2 standardmäßig in startup.cs Ich habe dies:

 services.AddAuthentication() 
      .AddJwtBearer(option => new JwtBearerOptions 
      { 
       Authority = string.Format("https://login.microsoftonline.com/tfp/{0}/{1}/v2.0/", 
       Configuration["Authentication:AzureAd:Tenant"], Configuration["Authentication:AzureAd:Policy"]), 
       Audience = Configuration["Authentication:AzureAd:ClientId"], 
       Events = new JwtBearerEvents 
       { 
        OnAuthenticationFailed = AuthenticationFailed 
       } 
      }); 

, die mir die folgende Störung gibt:

Microsoft.AspNetCore.Hosting.Internal.WebHost: Information: Request starting HTTP/1.1 GET http://localhost:44352/api/values/5 Microsoft.AspNetCore.Server.Kestrel: Fehler: Verbindungs-ID "0HL89JHF4VBLM", Request-ID "0HL89JHF4VBLM: 00000001": Eine nicht behandelte Ausnahme wurde von der Anwendung ausgelöst. System.InvalidOperationException: Es wurde kein authenticationScheme angegeben, und es wurde kein DefaultChallengeScheme gefunden.

wenn modifizierte services.AddAuthentication wie die

 services.AddAuthentication(sharedOption => 
     { 
      sharedOption.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; 
     }) 

der Fehler ist jetzt

Microsoft.AspNetCore.Authentication.JwtBearer.JwtBearerHandler: Information: Fehler beim Token xxx zu validieren. Microsoft.IdentityModel.Tokens.SecurityTokenInvalidSignatureException: IDX10500: Die Signaturvalidierung ist fehlgeschlagen. Zur Bestätigung der Signatur wurden keine Sicherheitsschlüssel bereitgestellt. bei System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateSignature (String-Token, TokenValidationParameters validationParameters) bei System.IdentityModel.Tokens.Jwt.JwtSecurityTokenHandler.ValidateToken (String-Token, TokenValidationParameters validationParameters, Security & validatedToken) bei Microsoft.AspNetCore. Authentication.JwtBearer.JwtBearerHandler.d__6.MoveNext()

+0

Dies ist nicht genug einzurichten Informationen, um Ihnen zu helfen. Können Sie Links zu den Beispielen hinzufügen, die Sie verwenden, dem Code, den Sie verwenden, den HTTP-Anfragen und Token-Nutzdaten? – Saca

+0

@Saca, Ich habe die Frage bearbeitet, um die Links und weitere Informationen hinzuzufügen, mit Ausnahme der Appsettings, die ich noch vorgenommen habe. –

+0

Es funktioniert, wenn App und Api mit .net Core 1.1 oder App 2.0 und Api 1.1 sind. Es funktioniert nicht, wenn App und Api 2.0 sind oder wenn App 1.1 ist und Api 2.0 ist –

Antwort

0

ich sah auf die Probe eine Pull-Anforderung, die dieses Problem zu beheben (Link), die services.AddAuthentication Veränderung sein muss:

 services.AddAuthentication(options => 
      { 
      options.DefaultScheme = JwtBearerDefaults.AuthenticationScheme; 
          }) 
      .AddJwtBearer(jwtOptions => 
      { 
      jwtOptions.Authority = $"https://login.microsoftonline.com/tfp/{Configuration["Authentication:AzureAd:Tenant"]}/{Configuration["Authentication:AzureAd:Policy"]}/v2.0/"; 
      jwtOptions.Audience = Configuration["Authentication:AzureAd:ClientId"]; 
      jwtOptions.Events = new JwtBearerEvents 
           { 
       OnAuthenticationFailed = AuthenticationFailed 
            }; 
      }); 
0

ich diese bekam Beispiel, das sowohl für Core 1.1 als auch für Core 2 funktioniert.0, benutzen Sie bitte den Eid-Authentifizierung wie unten hinzufügen,

services.AddAuthentication(sharedOptions => 
      { 
       sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme; 
       sharedOptions.DefaultChallengeScheme = OpenIdConnectDefaults.AuthenticationScheme; 
      }) 
      .AddAzureAdB2C(options => Configuration.Bind("Authentication:AzureAdB2C", options)) 

Sie Konfigurationsoptionen werden innerhalb der Klasse „AzureAdB2CAuthenticationBuilderExtensions“ definiert werden, die innerhalb des azure b2c project

Sieht aus wie Ihr Token nicht gefunden wird, ist Aktualisieren Sie es von der Azure, können Sie das Token von Ihrer Web-App abrufen? Könnten Sie bitte verifizieren, dass Sie nicht null erhalten?

Haben Sie Ihre API-Bereiche auf Ihrer azure b2c Mieter-Web-App registriert? „ApiScopes“: „https://fabrikamb2c.onmicrosoft.com/demoapi/demo.read

Sie in Ihrem Web-api einstellt Umfang haben und kann auf dem Web-App zu lesen, folgen Sie bitte die link um klicken Sie

Verwandte Themen