Asp.Net 核心 + Angular = 保护 Api 无需登录

Asp.Net Core + Angular = Protect Api without login

我有一个没有登录功能的 .net core + angular 应用程序。 我不需要登录,但我想要 "admin panel" 类型的功能。

例如,我想向我的站点添加帖子。

我知道我不能使用 api / addpost / myPassword 或任何只有我知道的复杂字符串 因为有办法看到这一点。 我如何在不实施注册/登录功能的情况下保护我的 api?

谢谢!

您可以做几件事。

您可以做的最简单的事情是创建一个自定义 ActionFilterAttribute,它将在输入您的 API 控制器方法之前验证您的服务调用。

我在这里使用了 Guid 值,但您可以使用任何值。

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method)]
public sealed class CustomValidateRequestAttribute : ActionFilterAttribute
{

    public override void OnActionExecuting(HttpActionContext actionContext)
    {
            var headerValue = actionContext.Request.Headers.FirstOrDefault(item => item.Key == "validation-value").Value?.FirstOrDefault();
            Guid guidValidationValue;

            if (string.IsNullOrWhiteSpace(headerValue ) && !Guid.TryParse(headerValue , out guidValidationValue))
            {
                throw new UnauthorizedAccessException();
            }

            base.OnActionExecuting(actionContext);
        }
    }

您将把这个自定义属性添加到 API 控制器中的 AddPost 方法。

[HttpPost]
[CustomValidateRequest]
public async Task<IHttpActionResult> AddPost...//rest of your code

在客户端的服务中,您必须将此 header 值添加到 headers。类似于:

addPosts(url, data) {
    let headers = new Headers();
    headers.append('validation-value', 'your-guid-value-or-something-else');
    return this.http.post(url, {
      headers: headers
    });
  }

对于更复杂和更安全的选项,您可以查看如何实现 Anti-Forgery 中间件 here and here