Ich habe die Formularauthentifizierung in einem Projekt implementiert. Im Formular Authentifizierungs-Cookie speichere ich die Login-ID des Benutzers. das heißtWo kann ich den Formularauthentifizierungs-Cookie lesen?
FormsAuthentication.SetAuthCookie(LoginId, false);
Ich brauche jetzt den Cookie-Wert bei jeder Anfrage lesen Weitere Informationen über den Benutzer zu erhalten und diese Informationen in der HttpContext.Items Eigenschaft setzen. Das Projekt ist ein MVC-Projekt, das sowohl reguläre MVC-Controller als auch Web-API-Controller hat. Derzeit habe ich zwei Aktionsfilter erstellt - einen für die MVC-Controller und einen für Web-API-Controller, in denen ich diesen Wert lese. So wie
public class MyMvcFilter : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
var ticket = FormsAuthentication.Decrypt(cookie.Value);
filterContext.HttpContext.Items.Add("LoginId",ticket.Name);
}
base.OnAuthorization(filterContext);
}
}
und
public class MyFilter : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
base.OnActionExecuting(actionContext);
var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie == null)
{
return;
}
var ticket = FormsAuthentication.Decrypt(cookie.Value);
if (ticket == null)
{
return;
}
actionContext.Request.Properties.Add("LoginId", userId);
}
}
Doch je mehr ich davon, desto mehr sieht aus wie ein hässlicher Hack zu mir. Was wäre der korrekte Ort, an dem ich den Authentifizierungscookie entschlüsseln kann und derselbe für den MVC-Controller und den Web-API-Controller bleibt?
Optional können Sie dies überprüfen: https://msdn.microsoft.com/en-us/library/system.security.claims.claimsprincipal.claimsprincipalselector(v=vs.110).aspx – granadaCoder