我无法想象,对于ASP.NET应用程序来说,不存在一个易于使用的高效,轻量级,安全的身份验证和授权库。你的控制器和视图。我阅读了大量的文章,我进行了大量的搜索,但还没有找到。有谁知道这样的图书馆?或者是否有人自己创建并愿意分享?
ASP.NET身份验证系统主要基于用户名而不是UserId。我真的不明白。想象一下,您想创建一个包含评论的博客。用户可以注册并发表评论。两个着名的MVC示例(Nerddinner和MVC Music Store)使用默认的asp.net认证系统(membershipprovider / identy / principal等)并使用用户名来存储属于某个对象的用户,例如: “HostedBy” -field。
对我来说,这似乎不是一个很好的做法:
如果不更改所有相关记录,则无法更改用户名。
为什么不把我们作为Id?您只需要8个字节即可存储1600万用户。除非您将用户名限制为8个字节字符,否则在存储空间方面效率较低。
基于字符串的关系似乎效率不高,因为基于字符串的查找比基于整数的查找要慢。
Oke,我可以想象你为什么要使用Guid而不是int,因为这几乎是不可能猜到和记住的,可以以某种方式提高安全性;如果这就是原因,那对我来说没问题。
但是,然后问题仍然是为什么IIdentity接口只提供用户名而不是UserId。如果您使用UserId作为外键,则很难例如获取当前登录用户的所有帖子的列表:您始终需要数据库查找来获取属于用户名的UserId。
我想知道的另一件事是认证系统看起来相当臃肿。我最好的猜测是,最多只有90%的用户会在一个应用程序中使用身份验证系统。那么,为什么要创建默认功能以使其能够为多个应用程序提供服务? (aspnet_Users中的应用程序列)。
如果你不关心这些事情,它可能是好的,但是,我想为1600多万用户做准备,不是吗?或者,我想在50ms以下服务我的页面......那么......为什么微软以这种方式构建默认的身份验证系统?这对我来说似乎很臃肿和蹩脚。
相关问题(不能回答我的问题):
How can I access UserId in ASP.NET Membership without using Membership.GetUser()?
答案 0 :(得分:0)
好的,你不喜欢ASP.NET Membership Provider。如果你是NHibernate商店,那么你可以看看Ayende Rahien的Rhino Security。