【问题标题】:How to authenticate a request coming to WEB API [closed]如何验证来自 WEB API 的请求 [关闭]
【发布时间】:2020-01-03 07:12:35
【问题描述】:

我有一个 WEB API,可以接收来自多个应用程序的请求。根据收到的JSONWEB API 逻辑决定要处理的步骤,最后向负责的个人发送通知。

我需要保护我的 WEB API,以便未经授权的系统不会向 WEB API 发送请求,这可能会导致不必要的处理并向收件人发送不需要的消息。

基本上我试图避免 WEB API 被攻击。为了做到这一点,我有一个想法,客户端系统必须在请求标头中发送一个客户端 ID,WEB API 必须在其中进行身份验证。 What is the best approach to achieve this requirement? and How to do this?

如果我能详细了解如何实现这一点以及如何创建客户端 ID,以及对请求 WEB API 的客户端进行身份验证,我将不胜感激。

【问题讨论】:

标签: c# authentication asp.net-web-api asp.net-core-webapi


【解决方案1】:

如果您的 web api 只接收一些应用程序,您可以使用 AuthorizationFilterAttribute 应用 IP 过滤器。

public class IpFilter : AuthorizationFilterAttribute
    {
        string[] allowedIps;

        public IpFilter()
        {
            allowedIps = ReadFromConfig(); //You may read from config your allowed ips
        }

        public override void OnAuthorization(HttpActionContext actionContext)
        {
            CheckIps(actionContext);
        }

        public void CheckIps(HttpActionContext actionContext)
        {
            string requestIpAddress = context.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

            if (string.IsNullOrEmpty(requestIpAddress ))
            {
               requestIpAddress = HttpContext.Current.Request.UserHostAddress;
            }

            if(string.IsNullOrEmpty(requestIpAddress))
                throw new HttpResponseException(HttpStatusCode.Unauthorized);


            foreach (var ip in allowedIps)
            {
                if (requestIpAddress == ip.Trim())
                    return;
            }

            actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized,
                new { Message = "Unauthorized" });
        }
    }

那么你需要做的就是将这个属性添加到控制器中。

[IpFilter]
public class YouController : ApiController
{
}

【讨论】:

  • 对我的场景来说似乎是个好方法
  • 那么您可以支持此解决方案并标记为已接受的答案:)
【解决方案2】:

首先,让我们把这些概念弄清楚。

身份验证 => 关于身份验证

授权 =>关于权限

身份验证意味着确认自己的身份,而授权意味着被允许访问系统。

  • 您可以使用 JWT 让它们在标头中发送客户端 ID、数字等(编码)。

  • 在 JWT 中,您的令牌标头中有一个密钥(编码),可防止其他用户访问您的 API。

您可以搜索更多信息herehere

【讨论】:

    【解决方案3】:

    任何对此问题投反对票的人都必须添加投反对票的原因!我在问一个问题,因为从我的角度来看这是一个有效的问题。如果不是,那么在 Stackoverflow 中提问的意义何在。管理员可以调查一下吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-30
      • 2016-03-19
      • 2011-05-16
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2021-02-13
      • 1970-01-01
      相关资源
      最近更新 更多