检查 file/page 是否允许匿名访问

Check if file/page allows anonymous access

我正在使用 Application_BeginRequest 方法处理 Global.asax 文件。如何知道当前请求的文件是否需要授权?

我知道我可以查明当前用户是否可以像这样访问该文件:

UrlAuthorizationModule.CheckUrlAccessForPrincipal(path, user, httpVerb)

...但我需要知道 if 文件是否为 public 无论用户发出请求(无论他们是否登录) ).

为用户传入null会抛出异常。也许我可以传入一个 anonymous 用户的实例,但我不知道从哪里开始。

我将使用此信息进行进一步检查,作为 SSO 验证的一部分。

由于 CheckUrlAccessForPrincipal 方法会告诉您某个用户是否可以访问特定资源,传入匿名用户(而不是当前用户)将告诉您是否 任何人 可以访问该资源。

  1. 创建匿名用户:

    var anonymousUser = new GenericPrincipal(new GenericIdentity(String.Empty, String.Empty), new string[] { });
    
  2. 将用户传入 CheckUrlAccessForPrincipal 方法:

    bool isPublicResource = UrlAuthorizationModule.CheckUrlAccessForPrincipal(virtualPath, anonymousUser , HttpContext.Current.Request.HttpMethod);