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
});
}
我有一个没有登录功能的 .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
});
}