Asp.net web api 如何在Web Api项目中保护Elmah.axd

Asp.net web api 如何在Web Api项目中保护Elmah.axd,asp.net-web-api,elmah,Asp.net Web Api,Elmah,我正在使用这个Elmah包记录WebAPI项目中未处理的异常 该软件包与Web API配合得非常好,它能够成功地将所有未处理的异常记录到Elmah中,但不必担心如何保护Elmah.axd。我使用Asp.Net身份令牌承载身份验证进行API调用,因此默认安全机制在我的情况下无效。在我的情况下,我想只允许具有管理员角色的用户使用此功能。请建议我已经找到了两种解决token问题的方法,但这两种方法在某些方面都有缺陷,但都是可用的: Elmah.mvc允许您决定要使用的url,因此,如果您通过禁用对/

我正在使用这个Elmah包记录WebAPI项目中未处理的异常


该软件包与Web API配合得非常好,它能够成功地将所有未处理的异常记录到Elmah中,但不必担心如何保护Elmah.axd。我使用Asp.Net身份令牌承载身份验证进行API调用,因此默认安全机制在我的情况下无效。在我的情况下,我想只允许具有管理员角色的用户使用此功能。请建议

我已经找到了两种解决token问题的方法,但这两种方法在某些方面都有缺陷,但都是可用的:

  • Elmah.mvc允许您决定要使用的url,因此,如果您通过禁用对/Elmah url的访问来禁止访问原始Elmah,而是为Elmah.mvc添加一个应用设置,如下所示:
  • 
    
    然后,通过提供更安全/随机的url,您可以成为唯一能够访问它的人。这种方法存在一些安全缺陷,因为它依赖于秘密url,但许多网站在向您发送只有您可以用于登录的url等时确实使用了这种方法。有关这种方法的安全性以及含义的更多信息,请访问security.stackexchange.com

  • 执行您自己的方法,您可以从控制台调用该方法以提供所需的身份验证标头。对于angular来说,它可以是这样的(想法是您使用已经拦截请求的框架来添加令牌,并利用它来发布get to elmah):
  • 函数elmah(){
    角度元素(document.body)
    .注入器()
    .get(“$http”)
    .get(“\elmah”)
    .成功(功能(响应)
    {
    var elmahWindow=window.open(“”);
    elmahWindow.document.write(响应);
    });
    };
    
    然后,如果在控制台中键入elmah(),将打开一个新窗口。这种方法似乎足够安全(除非您更改方法以接受一些参数,这些参数可能会在xss或其他文件中被滥用),但问题是您只能在elmah中看到原始视图,单击所有URL将失败。它可以以各种方式扩展,但我看不到一种简单方便的方法来修复它