當 JavaScript 從同源頁面呼叫 Web API 時,ASP.NET 表單驗證的 Cookie 會自動隨請求發送,基礎安全已具備。但需特別防範 CSRF(跨站請求偽造)攻擊,並支援非瀏覽器客戶端與擴展授權邏輯。
ASP.NET 提供 AntiForgery 類別產生雙 Token(Cookie Token + Form Token),嵌入頁面並在 AJAX 請求標頭帶回驗證。
[Authorize(Roles="manager")]
public ActionResult Index() {
string cookieToken, formToken;
AntiForgery.GetTokens(null, out cookieToken, out formToken);
ViewBag.cookieToken = cookieToken;
ViewBag.formToken = formToken;
return View("Index");
}
// 方式一:直接寫入標頭
$.ajax("https://phvis.com/api/Customers", {
type: "get",
contentType: "application/json",
headers: {
'formToken': '@ViewBag.formToken',
'cookieToken': '@ViewBag.cookieToken'
}
});
// 方式二:隱藏欄位儲存,JS 讀取後帶入
@Html.Hidden("formToken")
@Html.Hidden("cookieToken")
$.ajax("https://localhost:49226/api/Customers", {
type: "get",
contentType: "application/json",
headers: {
'formToken': $("#formToken").val(),
'cookieToken': $("#cookieToken").val()
}
});
string code = "function CallService(){ $.ajax('https://phvis.com/api/Customers',{ type:'get', contentType:'application/json', headers:{'formToken':'"+formToken+"','cookieToken':'"+cookieToken+"'}}); }";
this.ClientScript.RegisterClientScriptBlock(typeof(Page), "loadCustid", code, true);
AuthorizeAttribute,依據聲明、角色、資源擁有權等條件授權Web API 安全性建立在 ASP.NET 管線之上,善用內建防偽機制並配合 HTTPS、Token 認證,可構建完整的 API 保護體系。