2016-09-01 1 views
0

Ich arbeite an einer API, die bestimmte Endpunkte für Benutzer mit den richtigen Berechtigungen sichern muss. Ich benutze IdentityServer3 und folge diesem pluralSight Kurs: https://app.pluralsight.com/library/courses/oauth-secure-asp-dot-net-api/table-of-contentsIdentity Server 3 Kontaktaufnahme mit dem Webserver hängt beim Start des Debug-Modus

Ich habe die Schritte des Erstellens eines selbstsignierten Zertifikats und das Laden dieses als mein Unterschriftszertifikat durchlaufen. Ich habe meine API und meinen Auth-Server in demselben .NET-Projekt.

In der startup.cs Datei, wenn ich diesen Code verwenden, um festzulegen, wie ein eingehender Token akzeptiert wird, funktioniert die Anwendung in Ordnung und ich kann einen Endpunkt mit dem [Authorize] Attribute zuzugreifen:

public class Startup 
{ 
    public void Configuration(IAppBuilder app) 
    {   
     app.UseIdentityServer(CreateIdentityServerOptions()); 

     var cert = new x509certificate2(
       convert.frombase64string("My Certificate Public Key") 
      ); 

     app.usejwtbearerauthentication(new jwtbearerauthenticationoptions 
     { 
      allowedaudiences = new[] { "http://localhost/MyProject/resources" }, 
      tokenvalidationparameters = new tokenvalidationparameters 
      { 
       validaudience = "http://localhost/MyProject/resources", 
       validissuer = "http://localhost/MyProject", 
       issuersigningkey = new x509securitykey(cert) 
      } 
     }); 
    } 

    //Other Code, such as CreateIdentityServerOptions(), goes here. 
} 

So kann ich einen Hit Haltepunkt in diesem Endpunkt:

[HttpGet] 
[Authorize] 
public IHttpActionResult GetUser() 
{ 
    var claimsPrincipal = User as ClaimsPrincipal; 
    var userName = claimsPrincipal.FindFirst("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value; 

    var userId = GetUserId(userName); 

    return Ok(); 
} 

Aber wenn ich den Kurs halten folgende und zum Teil erhalten, wo es IdentityServer3.AccessTokenValidation den Code so zu vereinfachen, verwendet:

public void Configuration(IAppBuilder app) 
{   
    app.UseIdentityServer(CreateIdentityServerOptions()); 

    app.UseIdentityServerBearerTokenAuthentication(new IdentityServerBearerTokenAuthenticationOptions() 
    { 
     Authority = "http://localhost/MyProject" 
    }); 
} 

Nach dieser Änderung, wenn ich die Anwendung starten, erhalte ich ein Popup in Visual Studio, der sagt „Kontaktaufnahme mit dem Web-Server zu starten Debugging“, dh aufgibt und Ausfahrten für ein paar Minuten dann hängt. Die Anwendung wird nicht gestartet.

Ich verdächtigen, dass dies ist, weil ich die Logik für den Auth-Provider und Auth Consumer im selben Projekt haben, so ist es im Wesentlichen warten auf das Projekt zu beginnen, den öffentlichen Schlüssel zu greifen ... so kann es Anfang. Aber ich möchte sichergehen, dass ich das Problem verstehe, bevor ich mich für eine Weiterentwicklung entscheide.

+0

Was ist mit Protokollierung? Was sagen die Protokolle? –

Antwort

3

Wenn IdentityServer und der Token-Consumer in derselben Anwendung gehostet werden, kann beim Abrufen des Erkennungsdokuments eine Race-Bedingung auftreten.

Für diese Situationen setzen Sie die Eigenschaft DelayLoadMetadata auf der Access Token Validierungs-Middleware auf true.

Verwandte Themen