我使用基本身份驗證來傳遞憑據進行授權。這將憑據放在標題中。通過使用jQuery ajax函數的事件處理程序之前的beforeSend來做到這一點非常簡單。這裏是一個如何做到這一點的例子。
getAuthorizationHeader = function (username, password) {
var authType;
var up = $.base64.encode(username + ":" + password);
authType = "Basic " + up;
};
return authType;
};
$.ajax({
url: _url,
data: _data,
type: _type,
beforeSend: function (xhr) {
xhr.setRequestHeader("Authorization", getAuthorizationHeader(username, password));
},
success: ajaxSuccessHandler,
error: ajaxErrHandler
});
這將編碼在標題中發送的用戶名/密碼。請注意,由於編碼很容易解碼,因此這不足以依賴編碼。您仍希望使用HTTPS/SSL來確保通過線路發送的信息是安全的。
在Web API方面,您可以自定義AuthorizeAttribute從頭獲取憑證,解碼它們並執行授權過程。 Web API使用了與控制器相對的獨立的AuthorizeAttribute。在創建自定義AuthorizeAttribute時,請務必使用System.Web.Http.AuthorizeAttribute作爲您的基類。他們有不同的行爲。控制器將要重定向到登錄頁面,而Web API的則返回指示成功或失敗的HTTP代碼。如果授權無法區分由於授權導致的失敗而不是身份驗證,則我會返回Forbidden的HTTP代碼,以便客戶端可以做出相應的反應。
以下是從標題中獲取證書的示例方法,該證書可用於自定義AuthorizeAttribute。
private bool GetUserNameAndPassword(HttpActionContext actionContext, out string username, out string password)
{
bool gotIt = false;
username = string.Empty;
password = string.Empty;
IEnumerable<string> headerVals;
if (actionContext.Request.Headers.TryGetValues("Authorization", out headerVals))
{
try
{
string authHeader = headerVals.FirstOrDefault();
char[] delims = { ' ' };
string[] authHeaderTokens = authHeader.Split(new char[] { ' ' });
if (authHeaderTokens[0].Contains("Basic"))
{
string decodedStr = SecurityHelper.DecodeFrom64(authHeaderTokens[1]);
string[] unpw = decodedStr.Split(new char[] { ':' });
username = unpw[0];
password = unpw[1];
}
gotIt = true;
}
catch { gotIt = false; }
}
return gotIt;
}
這裏是解碼在這個方法中使用的標題數據的代碼。
public static string DecodeFrom64(string encodedData)
{
byte[] encodedDataAsBytes
= System.Convert.FromBase64String(encodedData);
string returnValue =
System.Text.Encoding.ASCII.GetString(encodedDataAsBytes);
return returnValue;
}
一旦你的用戶名和密碼,您就可以執行授權程序及相應的HTTP代碼返回給客戶端處理。
更新2013年3月8日
我寫了blog post that goes into more details on how to implement this with SimpleMembership,爲MVC 4互聯網應用程序的默認成員資格提供。它還包含一個可下載的VS 2012項目來實現這一點。
這是你在找什麼? http://stackoverflow.com/questions/11014953/asp-net-mvc-4-webapi-authentication – user1797792