2016-04-27 15 views
1

Ich habe zwei Anwendungen, eine Web-API-Anwendung (y.x.com) und eine Front-End-Anwendung (z.x.com). Um den Benutzer zu authentifizieren, der zxcom besucht, benutze ich ws-föderation oder microsoft live login nach dem von Visual Studio 2015 zur Verfügung gestellten Web-API Template Code. Wenn ich direkt mit der Web-API-Anwendung (yxcom) von meinem Browser, Postboten, Fiddler oder alles ähnliche funktioniert die Authentifizierung gut, aber wenn ich versuche, mich von der Front-End-Anwendung anzumelden, bekomme ich error: invalid_request (Status 400).Anmeldung in einer Anwendung mit ws-Federation von Front-End-Anwendung

Nun frage ich mich, ob es möglich sein sollte, sich von der Anwendung z.x.com aus anzumelden, indem Sie y.x.com/Account/ExternalLogin?provider=Federation&response_type=token&client_id=self&redirect_uri=http://y.x.com anrufen.

Mein startup.auth in y.x.com sieht wie folgt aus

 OAuthOptions = new OAuthAuthorizationServerOptions 
     { 
      TokenEndpointPath = new PathString("/Token"), 
      Provider = new ApplicationOAuthProvider(PublicClientId), 
      AuthorizeEndpointPath = new PathString("/Account/ExternalLogin"), 
      AccessTokenExpireTimeSpan = TimeSpan.FromDays(14), 
      // In production mode set AllowInsecureHttp = false 
      AllowInsecureHttp = true 
     }; 

     // Enable the application to use bearer tokens to authenticate users 
     app.UseOAuthBearerTokens(OAuthOptions); 

     var wsOptions = new WsFederationAuthenticationOptions 
     { 
      MetadataAddress = "https://login.microsoftonline.com/afd2d5a6-bdb1-43f8-a42b-83ec49f1f22d/federationmetadata/2007-06/federationmetadata.xml", 
      Wtrealm = "http://y.x.com/", 
      Notifications = new WsFederationAuthenticationNotifications() 
     }; 
     app.UseWsFederationAuthentication(wsOptions); 

ich mehr Code zur Verfügung stellen kann, aber ich bin meistens interessiert, wenn sollte bei allen. Danke.

Antwort

1

Dies ist möglich. Nach dem Ausgraben und Helfen stellt sich heraus, dass es in der Web-API-Vorlage eine Methode namens ValidateClientRedirectUri in der Klasse ApplicationOAuthProvider gibt. Wenn ich ändern diese Methode

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) 
{ 
    context.Validated(); 
    return Task.FromResult<object>(null); 
} 

und dann von meiner Front-End-Anwendung ich jetzt jede Rückkehr url haben kann ich will, kann sich anmelden von der Front-End-Anwendung über das Web-API-Anwendung auf eine Herstellung externe Quelle.