将第三方登录集成到ASP.NET应用程序的OWIN中间件非常酷,但我似乎无法弄清楚如何从新的ID框架中删除它来取代糟糕的Membership API.我对在基于EF的数据持久性中持久化声明和用户信息不感兴趣,我只想要声明信息,以便我可以将它应用于我自己在现有项目中的用户帐户.我不想采用新的ID框架来利用这些东西.
我一直在浏览CodePlex上的代码,但是有很多静态魔法.你能提出任何建议吗?
我通过网络阅读理解它的方式是声明存储为cookie,现在我将用户的角色添加到声明集合中,因此它将保存到声明Cookie中.现在这很好,因为每次我在ASP MVCController中检查授权属性时,它会省去数据库轮次跳转以检索用户角色.
我正在使用带有身份2.0的mvc 5.我想在应用程序上使用自定义声明值,但我得到null值.我究竟做错了什么?
更新的代码
帐户控制器中的登录代码
if (!string.IsNullOrEmpty(model.UserName) && !string.IsNullOrEmpty(model.Password))
{
AuthenticationManager.SignOut(DefaultAuthenticationTypes.ExternalCookie);
var result = SignInManager.PasswordSignIn(model.UserName, model.Password, model.RememberMe, shouldLockout: false);
//Generate verification token
Dictionary<string, string> acceccToken = null;
if (SignInStatus.Success == 0)
{
var userDeatails = FindUser(model.UserName, model.Password).Result;
if (userDeatails != null)
acceccToken = GetTokenDictionary(model.UserName, model.Password, userDeatails.Id);
}
if (model.RememberMe)
{
HttpCookie userid = new HttpCookie("rembemberTrue", "1");
userid.Expires.AddDays(1);
Response.Cookies.Add(userid);
}
else
{
HttpCookie userid = new HttpCookie("rembemberTrue", "0");
userid.Expires.AddDays(1);
Response.Cookies.Add(userid);
}
#region custom claims
var claims = new Claim[]
{
new Claim("urn:Custom:MasterUniqueId", …Run Code Online (Sandbox Code Playgroud) c# claims-based-identity owin asp.net-mvc-5 asp.net-identity
我正在为我们的MVC应用程序开发基于声明的授权原型.我们使用Asp.Net Identity进行身份验证.
我们希望对每个控制器操作提出索赔,然后给予/取消用户的索赔,这样我们就可以很好地控制谁可以去哪里.
我们的应用程序已有800多个动作并且不断增长.我做了一个小测试应用程序,看看如何处理这些索赔.并遇到一个问题:cookie限制为4092字节.
并且拥有大量声明会增加身份验证Cookie.大约600个具有短名称/值(每个5个字符)的声明为我提供了大小超过4K的cookie,并且具有此数量的声明的用户无法登录 - 无法在浏览器中设置cookie.
600个声明不是我们的应用程序的限制.我们可能还需要更多.
有没有办法将auth-cookie分成几个较小的cookie?
ps如果你很好奇,这里是我的代码"profiler"以及项目的其余部分.
pps我知道大型cookie的性能影响.现在不用担心.
更新目前我的答案没有开箱即用的解决方案.但看起来我不是唯一有这个问题的人.Microsoft.Owin正在处理auth-cookie.目前Owin.Cookies的源代码具有ChunkingCookieManager,默认情况下在CookieAuthenticationMiddleware中分配.
这段代码非常新鲜的坏消息(已于2014年7月10日签入,仅20天).它可以通过预先发布的nuget Microsoft.Owin.Security.Cookies获得.不确定我是否想在生产现场使用RC2.
还有其他方法吗?