9

Trong phiên bản trước của ASP.NET trong qúa trình sõn SPA ý tưởng AntiForgey thẻ được như sau:Sử dụng đúng mã thông báo AntiForgery trong ASP.NET 5 trong ứng dụng SPA?

  • thêm @Html.AntiForgeryToken(); trên trang
  • thêm __RequestVerificationToken để yêu cầu
  • ovverride AuthorizeAttribute như ValidateJsonAntiForgeryTokenAttribute.

tôi không thực sự hiểu các yêu cầu ủy quyền (có một số nguồn thông tin tốt?) Trong ASP.NET 5 nhưng trông giống như hành vi mới nên như thế này:

  • thêm asp-anti-forgerytaghelper
  • thêm __RequestVerificationToken vào yêu cầu
  • ở đây phải là yêu cầu mới.

Câu hỏi đặt ra là: cách viết yêu cầu ủy quyền mới này và xóa yêu cầu chuẩn? Ai đó có thể đưa ra một số lời khuyên hoặc chỉ cho tôi một số ví dụ? Cảm ơn

+0

Có vẻ như tôi cần tạo phần mềm trung gian theo yêu cầu và kiểm tra xem đó có phải là phương tiện để sử dụng theo cách của tôi hay sử dụng chuẩn đang chờ đợi _antiforgery.ValidateRequestAsync (ngữ cảnh); Nhưng vẫn không chắc chắn về nó. Một cái gì đó như thế này https://github.com/aspnet/Antiforgery/blob/dev/samples/AntiforgerySample/FormPostSampleMiddleware.cs – Memfis

Trả lời

1

Với MVC6, nếu bạn sử dụng một cái gì đó như thế này:

<form asp-controller="Account" 
     asp-action="Login"> 
</form> 

Bạn sẽ tự động nhận được:

<form action="/Account/Login" method="post"> 
    <input name="__RequestVerificationToken" type="hidden" value="...."> 
</form> 

asp-antiforgery sẽ chỉ được sử dụng nếu bạn muốn tắt hành vi đó.

Đối với bản thân xác thực, nó đã được thêm vào khi bạn đã thực hiện app.AddMvc(...) trong phương thức ConfigureServicesConfigure của mình.

Thực tế, có rất nhiều nội dung đang được thêm vào và nếu bạn tò mò, bạn có thể check out the code!

Nếu bạn thực sự tạo điều này từ Hành động sử dụng thì bạn có thể có bộ điều khiển phụ thuộc vào IHtmlGenerator và tạo mã thông báo theo cách đó.

+0

Xin lỗi nếu tôi không rõ ràng. Tôi đồng ý với điều này, nhưng nó chỉ hoạt động với MVC6 như bạn đã đề cập. Tôi hỏi về SPA. Làm thế nào tôi nên xử lý '__RequestVerificationToken' được gửi bởi Angular ví dụ, không phải là một hình thức gửi. – Memfis

+1

Đã cập nhật câu trả lời. Về cơ bản, nó được tạo ra từ 'IHtmlGenerator' phụ thuộc vào' IAntiForgery' phụ thuộc vào một loại phụ thuộc hoàn toàn khác. Nếu bạn cần đảm bảo nó có mặt thì đó là cách để làm điều đó. Hoặc bạn có thể tắt nó đi. –

0

Trong AspNetCore 1.1.0.0 (Có lẽ cũng trong các phiên bản trước đó) với một kịch bản SPA này thực sự là khá dễ dàng:

Hãy chắc chắn rằng bạn cung cấp trang chỉ mục của bạn từ một.xem cshtml và chỉ cần thêm

@Html.AntiForgeryToken() 

Nếu bạn đang sử dụng jquery sau đó bạn có thể đọc thẻ này và chắc chắn rằng nó được gửi cùng với tất cả các phi nhận được yêu cầu trong tương lai bên trong một http-header

$(document).ajaxSend(function(e, xhr, options) { 
    if (options.type.toUpperCase() != "GET") { 
     xhr.setRequestHeader("RequestVerificationToken", $("input[name='__RequestVerificationToken']").val()); 
    } 
}); 

Bên trong của bạn phương pháp điều khiển, chỉ cần thêm

[HttpPost] 
[ValidateAntiForgeryToken] 
public string TestAntiForgery() 
{ 
    return "success"; 
} 

Nếu bạn muốn/phải sử dụng một tiêu đề differen bạn có thể thay đổi nó như thế này trong configureServices:

services.Configure<AntiforgeryOptions>((options) => 
{ 
    // Configure a different header here 
    options.HeaderName = "otherHeaderName"; 
}); 
Các vấn đề liên quan