使用C#的基于表单的身份验证失败的应用程序

时间:2018-05-15 04:06:44

标签: c# asp.net iis form-authentication

我正在尝试在asp.net中为我的一个应用程序在IIS中的默认网站上实现表单身份验证,以防止匿名用户访问该网站,当我尝试这样做时我遇到了一些问题

我在web.config文件中完成了以下设置,以便此应用程序实现form-auth。我已经包含机器密钥标记,基于表单的身份验证的身份验证标记和拒绝匿名用户的授权标记

<authentication mode="Forms">
  <forms name="cookiename" cookieless="UseCookies" path="/" protection="None" timeout="30" />
</authentication>
<authorization>
  <deny users="?"/>
</authorization>

在IIS UI中,

  • .NET授权规则允许具有拒绝规则的匿名用户和具有允许规则的所有用户(具有继承类型)
  • 此外,在身份验证UI下,我禁用了匿名身份验证并启用了基于身份验证(我们是否需要在此处禁用匿名身份验证?)

当用户登录我们的门户网站时,会将cookie分配给该用户,以便IIS可以跟踪用户的身份并导航到我正在尝试实现表单身份验证的应用程序(Aspx页面)。我正在使用webclient发布一些请求,以便在导航到此应用程序之前执行一些验证,我使用CookieAwareWebClient来处理cookie。

public class CookieAwareWebClient : WebClient
{
  public CookieAwareWebClient()
  {
     CookieContainer = new CookieContainer();
  }
  public CookieContainer CookieContainer { get; private set; }

  protected override WebRequest GetWebRequest(Uri address)
  {
    var request = (HttpWebRequest)base.GetWebRequest(address);
    request.CookieContainer = CookieContainer;
    return request;
   }
 }

使用CookieAwareWebClient,我正在尝试发布请求。在这里,authenticationCookie是用户登录后立即创建的cookie,我将此值设置为myCookie对象,以便IIS可以跟踪用户的身份

using (CookieAwareWebClient client = new CookieAwareWebClient())
{         
  Cookie myCookie = new Cookie();
  myCookie.Name = authenticationCookie.Name; 
  myCookie.Value = authenticationCookie.Value;
  myCookie.Domain = URL.Host;
  client.CookieContainer.Add(myCookie);                    
  client.UseDefaultCredentials = true;

  byte[] responsebytes = client.UploadValues(URL, "POST", reqparm);
}

当我尝试将请求发布到URL时,即使Web客户端具有保存cookie值的cookie容器,用户的身份也会丢失,我收到401错误

 Remote server returned an error (401) Unauthorized

因此,IIS认为用户是匿名用户,因此无法加载应用程序。这是处理form-auth以防止匿名用户访问网站以及我在哪里出错的正确方法吗?我正在使用IIS 8.5版本

0 个答案:

没有答案