使用 OWIN 检查请求是否来自应用程序的本地服务器

Check is a request is coming from the server local to the app with OWIN

我需要为我的 Hangfire 仪表板创建一个 AuthroizationFilter。

其 运行 在 Azure VM 上,按设计应仅接受来自本地请求的请求。

我想创建一个 AuthorizationFilter,它只验证来自 Web 浏览器的那些请求,这些请求在与 Web 应用 运行 相同的 VM 上。

我需要确定这种形式的 OwinContext :-

public class MyRestrictiveAuthorizationFilter : IAuthorizationFilter
{
     public bool Authorize(IDictionary<string, object> owinEnvironment)
     {
         // In case you need an OWIN context, use the next line,
         // `OwinContext` class is the part of the `Microsoft.Owin` package.
         var context = new OwinContext(owinEnvironment);

         // Allow all local request to see the Dashboard

         return true;
     }
}

如何检查请求上下文中的 header?

context.Request.Headers["Referer"]

如果该值包括 localhost 或 127.0.0.1 或您限制它的任何内容。

注意:这个header可以被欺骗。可能有更好的方法来限制对仪表板的访问。它需要上网吗?

可以使用HttpRequest.IsLocal吗?这将告诉您请求的 IP 地址是否与服务器的 IP 地址相同。

return context.Request.IsLocal;

我在处理自定义 CookieAuthenticationProvider 时遇到了类似的问题,其中只公开了 IOwinContextcontext.Request 没有公开 IsLocal 属性,但是以下内容可用:

context.Request.Uri.IsLoopback

对于 127.0.0.1localhost 请求,属性 是 true