我正在尝试在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中,
当用户登录我们的门户网站时,会将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版本