【问题标题】:How to implement ValidateAntiForgeryToken with angular 7 and asp.net web api如何使用 Angular 7 和 asp.net web api 实现 ValidateAntiForgeryToken
【发布时间】:2019-12-19 16:44:23
【问题描述】:

我的应用程序的服务器端内置在 Asp.Net web api 中,客户端是 angular 7。

我可以找到许多在使用 Web 表单、angularjs、使用 Razor 等时如何实现 ValidateAntiForgeryToken 的示例。

但我找不到任何文章或问题解释如何使用 web api 实现这一点以及如何从角度服务调用它。

有人可以展示一个服务器端和客户端实现此功能的简短示例吗?

【问题讨论】:

标签: angular asp.net-web-api


【解决方案1】:

您可以使用以下组合:

Web api create antiforgery token guide

  1. 设置应用程序
    public void ConfigureServices(IServiceCollection services)
    {      
        services.AddAntiforgery(options =>
        {
            options.HeaderName = "X-XSRF-TOKEN";                               
        });
  1. 创建将获取令牌的控制器操作。您也可以在过滤器中执行此操作。
[ApiController]
public class AntiForgeryController : Controller
{
    private IAntiforgery _antiForgery;
    public AntiForgeryController(IAntiforgery antiForgery)
    {
        _antiForgery = antiForgery;
    }

  [Route("api/antiforgery")]
  [IgnoreAntiforgeryToken]
  public IActionResult GenerateAntiForgeryTokens()
  {
      var tokens = _antiForgery.GetAndStoreTokens(HttpContext);
      Response.Cookies.Append("XSRF-REQUEST-TOKEN", tokens.RequestToken, new Microsoft.AspNetCore.Http.CookieOptions
      {
          HttpOnly = false
      });            
      return NoContent();
  }
  1. 将其应用于每个控制器
public void ConfigureServices(IServiceCollection services)
{
    //...
    services.AddMvc(options =>
    {
        options.Filters.Add(new ValidateAntiForgeryTokenAttribute());
    });
    //...

现在客户端可以使用内置的防伪机制http angular guide

imports: [
  HttpClientModule,
  HttpClientXsrfModule.withOptions({
    cookieName: 'Enter chosen name',
    headerName: 'Enter chosen name',
  }),
],

【讨论】:

  • 感谢您的回答。 3td 步骤是否假设第二步不是作为控制器实现的,而是作为过滤器实现的?你能提供过滤器的例子吗?以及关于角度 - 导入此模型后如何使用它?
  • 不,您需要控制器来获取 cookie。过滤器自己进行验证。
猜你喜欢
  • 2016-04-29
  • 2012-07-13
  • 2018-01-29
  • 1970-01-01
  • 2017-07-10
  • 2020-10-17
  • 1970-01-01
  • 1970-01-01
  • 2019-07-26
相关资源
最近更新 更多