这是我有关身份验证和授权的代码
public class SessionContext
{
public void setAuthenticationToken(UserAccount userAccount,bool isPersistant,string name)
{
string data = new JavaScriptSerializer().Serialize(userAccount.Roles);
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,name,DateTime.Now,DateTime.Now.AddYears(1),isPersistant,data);
var encryptedCookieData = FormsAuthentication.Encrypt(ticket);
HttpCookie httpCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedCookieData) { HttpOnly=true,Expires=ticket.Expiration };
HttpContext.Current.Response.Cookies.Add(httpCookie);
}
}
并且我的Global.asax具有此方法:
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
HttpCookie authCookie = Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { ',' });
GenericPrincipal userPrincipal = new GenericPrincipal(new GenericIdentity(authTicket.Name), roles);
HttpContext.Current.User = userPrincipal;
Debug.WriteLine(roles.FirstOrDefault() +" "+ userPrincipal.IsInRole("Admin"));
}
}
但是当我使用 [Authorize(Roles =“ Admin”)] 授权不起作用时。
我尝试了这些解决方案,但是没有用:
请帮助我解决这个问题,我在论坛上搜索了一整天,但没有找到任何内容。
注意:如您所见,我在Global.asax中添加了Debug.WriteLine()来向我显示userPrincipal角色状态,但始终返回false。
通知:如果可以,请向我展示另一种使用基于OWIN的授权和身份验证的方法
答案 0 :(得分:0)
一无所获... 我花了几个小时,才意识到问题出在将角色名称保存到HttpContext中,这是在用“”保存角色名称,而必须在不使用“”的情况下保存