( ): ID , -. .
( ), (20 ).
:
public static class MyRoles
{
private class Principal
{
private DateTime lastAccess;
private System.Security.Principal.GenericPrincipal principal;
public Principal(System.Security.Principal.GenericPrincipal principal)
{
this.principal = principal;
this.lastAccess = DateTime.Now;
}
public System.Security.Principal.GenericPrincipal GenericPrincipal
{
get
{
this.lastAccess = DateTime.Now;
return principal;
}
}
public bool IsValid
{
get
{
return DateTime.Now <= this.lastAccess.AddMinutes(20);
}
}
}
private static Dictionary<string, Principal> ids = new Dictionary<string, Principal>();
public static System.Security.Principal.GenericPrincipal GetRoles(string header)
{
if (ids.ContainsKey(header) && ids[header].IsValid)
{
return ids[header].GenericPrincipal;
}
else
{
var id = new System.Security.Principal.GenericIdentity(header);
var principal = new System.Security.Principal.GenericPrincipal(id, new MyRoleProvider().GetRolesForUser(id.Name));
ids.Add(header, new Principal(principal));
return principal;
}
}
}
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
var principal = MyRoles.GetRoles(Request.Headers["ceid"]);
}
, , GenericPrincipal. , , ( ) Session.
20 Session_End, , ( InProc).
, , , . (2 -), .
, . , , , , :)