我有一个使用 WebAPI、SignalR 的 ASP.NET MVC 网站。
我希望我的服务器(托管网站的同一台服务器)向 WebAPI Controller 发出 HTTP 请求 - 我希望这样做以便我可以连接到我网站的 SignalR 功能。
我想让网站用户无法访问 WebAPI Controller 上的方法,但服务器可以。
我查看了一般保护 WebAPI 请求的选项,似乎我可以使用以下选项:
- 为每个请求发送用户名和密码,也就是基本身份验证
- 生成“客户端证书”并随每个请求一起发送
这是仅有的两种听起来可行的方法,但我想知道如果请求来自本地主机(同一台服务器),使用这些方法是否有点过分。
这是不是太过分了,有没有更简单的方法来限制从本地机器到 WebAPI Controller 的 HTTP 请求?
最佳答案
如果您只想接受来自同一台机器的请求,您可以检查请求上下文的 IsLocal
属性 MSDN .
HttpRequest.Context.Request.IsLocal
然后您可以将其构建到自定义授权属性中并在全局注册它,从而在您的所有 Web API Controller 上强制执行要求。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Other Web API configuration code goes here
// This is a globally registered attribute
config.Filters.Add(new LocalRequestOnlyAttribute());
}
}
public class LocalRequestOnlyAttribute : AuthorizeAttribute
{
protected override bool IsAuthorized(HttpActionContext context)
{
return context.RequestContext.IsLocal;
}
}
关于c# - 如何保护 Web API 上的 Controller 仅供本地计算机使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30573517/