我有一个.net核心+角度应用程序,没有登录功能。 我不需要登录,但我想要一个“管理面板”类型的功能。Asp.Net Core + Angular =保护Api而不登录
例如,我想添加职位到我的网站。
据我所知,我不能使用API/addpost/myPassword或任何复杂的字符串只知道我 ,因为有办法看到这一点。 如何保护我的api而不实现注册/登录功能?
谢谢!
我有一个.net核心+角度应用程序,没有登录功能。 我不需要登录,但我想要一个“管理面板”类型的功能。Asp.Net Core + Angular =保护Api而不登录
例如,我想添加职位到我的网站。
据我所知,我不能使用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
在您的客户端服务中,您必须将此标头值添加到标头。喜欢的东西:
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函数使用了ActionExecutingContext(HttpActionContext没有工作,我使用的是.net核心2.0,可能这就是为什么)。在角度服务中,我从本地存储获取“密码” 。您的解决方案帮助了我,谢谢! – Marian
让我试着通过改述你的问题来理解这一点。您希望能够保护您的服务端点,因此无法在您的应用程序之外访问它,但是您不想实现登录/注册功能?这是你的意思吗? – eminlala
是的,我想成为唯一可以添加帖子的人。我不想仅为此实现注册/登录功能。如果你可以从应用程序之外访问该服务将会很好(也许我会雇用一个可以添加帖子的主持人......所以我可以给他“钥匙”来访问该API,但现在可以不在应用程序之外被接受) – Marian