这主要是一个理论问题,例如,如果我想创建自己的表单身份验证替代方案。
答案 0 :(得分:2)
Page.User
只返回Page.Context.User
,应通过模块或HttpApplication.AuthenticateRequest
设置global.asax
的处理程序。您可以提供IPrincipal
的自定义实现,然后可以返回IIdentity
的自定义实现。
例如:
public class App : HttpApplication
{
public App()
{
AuthenticateRequest += App_AuthenticateRequest;
}
void App_AuthenticateRequest(object sender, EventArgs e)
{
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null) return;
var userData = GetUserData(cookie.Value);
var userIdentity = new MyIdentity(userData);
Context.User = new MyPrincipal(userIdentity);
}
private string GetUserData(string value)
{
try
{
var ticket = FormsAuthentication.Decrypt(value);
return ticket == null ? null : ticket.UserData;
}
catch (ArgumentException)
{
Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
return null;
}
}
}
答案 1 :(得分:1)
您需要编写自己的身份验证模块 - 请参阅此excellent article,其中介绍了如何编写支持basic& amp;的ASP.NET身份验证模块。摘要认证。
如果您只考虑表单身份验证方案,那么您实际上不必编写一个。内置的Forms Authenticate模块具有很强的可扩展性(并提供了很大的灵活性)。
答案 2 :(得分:0)
经过一些谷歌搜索后,我找到了this blogpost。它很好地描述了如何做到这一点。基本上,您需要创建自定义HTTP模块并处理OnAuthenticateRequest
对象的HttpApplication
事件。