c# - 如何保护 Web API 上的 Controller 仅供本地计算机使用

标签 c# security asp.net-web-api certificate

我有一个使用 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/

相关文章:

c# - WCF 到数据库连接

c# - Azure 函数无法访问 mscorelib.dll 访问被拒绝

java - Spring Security和Struts2如何整合

c# - ASP.NET MVC CSRF 防伪 token 会过期吗?

c# - Entity Framework Code First Web.API 中的一对多关系

c# - 移植 C# 代码以在 OSX 上运行

c# - 在 VB.NET 与 C# 中实现属性的多级继承

security - SPA + API + OIDC : How to authenticate an API caller when it's only providing an ACCESS token?

javascript - 在所有情况下都使用 new Function() 不安全吗?

c# - Web API OData (OData Client v4) key 中的正斜杠