2016-04-27 42 views
1

我有兩個應用程序,一個是web-api應用程序(y.x.com)和一個是前端應用程序(z.x.com)。爲了驗證訪問zxcom的用戶,我使用ws-federation或Microsoft Live登錄後,使用visual studio 2015提供的web api模板代碼。如果我直接從瀏覽器,郵遞員,提琴手或者網頁瀏覽器訪問web api應用程序(yxcom)任何類似的身份驗證工作正常,但如果我嘗試登錄從前端應用程序,我得到error: invalid_request(狀態400)。從前端應用程序使用ws-federation登錄應用程序

現在我想知道是否可以通過調用y.x.com/Account/ExternalLogin?provider=Federation&response_type=token&client_id=self&redirect_uri=http://y.x.com從應用程序z.x.com登錄。

我在y.x.com startup.auth看起來像這樣

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

我可以提供更多的代碼,但我對是否應該在所有的工作最感興趣。 謝謝。

回答

1

這是可能的。在som挖掘並幫助後發現,在web-api模板中有一個名爲ValidateClientRedirectUri的類ApplicationOAuthProvider。如果我改變方法

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

,然後從我的前端應用程序,我現在能有什麼回報網址我想,使其能夠在經由網絡的API應用到前端應用程序簽名外部源。