2013-05-09 21 views
3

我有一個簡單的問題,可能點出一個複雜的答案:(調用從jQuery的我的網頁API安全

我有一個Web API,它工作得很好,但現在我想建立認證/授權。 我需要它在所有平臺上工作,但主要是從jQuery的自然,我不想把我的管道沿線用戶名和密碼以明文形式是這樣的:

function GetAllCategories() { 
    var credentials = $.base64.encode('r3plica:mypassword'); 
    var authType = "Basic " + credentials; 

    $.ajax({ 
     url: "http://localhost:18904/api/Categories", 
     type: "GET", 
     beforeSend: function (xhr) { 
      xhr.setRequestHeader("Authorization", authType); 
     }, 
     success: function (data) { 
      alert('Success!'); 
     }, 
     error: function() { 
      alert('error'); 
     } 
    }); 
} 

,所以我一直在尋找其他替代品。 是使用3段OAuth的唯一選擇嗎?我希望只傳遞一個查詢字符串鍵/值到我的api,讓它處理所有事情,但我無法一步步找到這樣做的過程。 一切似乎都很複雜。

那麼,有沒有人知道我能做什麼?我已閱讀加載並試圖實現大量內容。

我設法得到這個工作:http://codebetter.com/johnvpetersen/2012/04/04/moving-from-action-filters-to-message-handlers/ 從我雖然可以告訴,你需要使用你的公鑰發送到API之前加密您的字符串(用戶名),然後API將解密使用私鑰和授權你。

所以我的2個問題很簡單:)

  1. 你可以用上面的鏈接,並從jQuery的輕鬆調用(即不使用第三方庫)
  2. 如果沒有,什麼是最好的方式去關於保護我的API,使其可以直接從jQuery.ajax調用中調用?

只是爲了澄清,我使用SSL的API提前

乾杯,

/r3plica

回答

2

的網站(其中用戶可以查看到源代碼),我們通過生成一個PHP和AuthenticationToken把它轉換爲JavaScript。令牌更改每個頁面重新加載。

例如:

<script type="text/javascript">var authToken = '<?=genToken();?>'</script> 
[...] 
$.ajax([..] 
    beforeSend: function (xhr) { 
     xhr.setRequestHeader("ownToken", authToken); 
    }, 

,並檢查令牌Serverside集團。

+0

因此,您是說客戶端將始終使用服務器端邏輯?我知道每個請求上的令牌更改,因此嗅探它並不好,但會不會有客戶端不使用服務器端代碼的情況? – r3plica 2013-05-09 18:46:54

+0

如果您使用SSL連接,則「嗅探」問題已過時。它適用於用戶可以簡單查看html源代碼的情況。客戶端不使用Serverside代碼的情況例如是使用PhoneGap編譯的智能手機Web應用程序。但是,您可以將身份驗證數據存儲在localStorage或其他內容中。 – take 2013-05-09 18:51:51

+0

如何驗證我的web api中的'genToken()',然後在我的Web API中進行驗證? – Si8 2017-01-26 14:27:05

0

你沒有太多的選擇以確保您的應用程序因爲所有呼叫都是由前端應用程序完成的,因此始終可以嗅探呼叫。

但是,您可以考慮將ssl與asp.net認證結合使用。

請看看我的其他職位認證的可能性: ASP.NET Web API Authentication Options

再回到你的問題: 你所想達到可以簡單地使用asp.net窗體身份驗證來完成。您可以使用Authorize屬性修飾您的視圖方法(在您的控制器類中);

[Authorize] 
+0

嗨,謝謝你的回覆。我目前正在使用SSL,因此您在鏈接中建議的選項不可用,原因與原始發佈者相同:) – r3plica 2013-05-09 18:38:21