2014-06-23 51 views
5

我想通過Facebook爲我的網絡api驗證用戶。當我指定returnurl參數到網站的底部時,我能夠驗證用戶。Asp.net網絡api 2 Facebook登錄

我的網站佈局在我的測試環境如下:

http://subdomain.main.com/api/ - This is the api location

http://subdomain.main.com/web/ - This is the client website location

我得到通過API提供的列表,並將其返回以下JSON

[{"Name":"Facebook","Url":"/api/api/Account/ExternalLogin? 
provider=Facebook&response_type=token& 
client_id=self&redirect_uri=https%3A%2F%2Fsubdomain.main.com%2F&state=mScYbSFDVHMMxVH8kaNWmDUNhqo2s4RFbG9SaBXt_jM1","State":"mScYbSFDVHMMxVH8kaNWmDUNhqo2s4RFbG9SaBXt_jM1"}] 

我然後將用戶重定向到由API提供的網址。這會打開Facebook並要求用戶允許我的應用程序。

所以其所有的工作時,我使用的基本URL,但是當我改變RETURNURL以下幾點:

https://subdomain.main.com/api/api/Account/ExternalLogins?returnUrl=https://subdomain.main.com/web/&generateState=true

API返回的URL爲正常,但是當我嘗試將用戶重定向到提供它只是返回的網址:

error: invalid_request

我怎樣才能讓API重定向到我的網站,以便我可以捕獲oauth令牌?

回答

5

您需要編輯ValidateClientRedirectUri方法以包含您的自定義返回uri。默認模板代碼只允許您的網站的根作爲有效的返回URI。

下面的例子是一個快速破解,直到你決定確切的返回uri。

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) 
    { 
     if (context.ClientId == _publicClientId) 
     { 
      Uri expectedRootUri = new Uri(context.Request.Uri, "/"); 

      if (expectedRootUri.AbsoluteUri == context.RedirectUri) 
      { 
       context.Validated(); 
      } 
     } 

     return Task.FromResult<object>(null); 
    } 

public override Task ValidateClientRedirectUri(OAuthValidateClientRedirectUriContext context) 
    { 
     if (context.ClientId == _publicClientId) 
     { 
      context.Validated(); 
     } 

     return Task.FromResult<object>(null); 
    }