新的身份验证和以前的授权筛选器有什么区别?我看不出有什么不同。我一直用:[Authorize(Roles = "Admin, User")]
何时使用身份验证筛选器?什么时候使用授权?
谁能解释一下区别吗?样本会很棒的。谢谢
发布于 2013-11-08 13:30:17
您可以找到一篇文章这里:
我还创建了一个类似的帖子这里:
虽然我得到的答案是很好地澄清了一些事情,但我仍然有点困惑如何使用它,但更多的是与预期的行为(你会看到如果你看我的文章)。
简而言之,新的Authentication
过滤器是在旧的Authorization
过滤器之前触发的。
此外,据我所知,身份验证将是一个很好的地方来检查一个用户是否在您的网站上认证。换句话说,那个用户在某个时候是否给了我他的凭据,让我在数据库中查找它们。如果答案是肯定的,那么great...continue。
如果答案是否定的,那么用户就没有经过身份验证,这反过来,我应该返回一个http状态代码401未经授权的。
至于Authorization
,我的理解是,用户是通过隐式身份验证的,他可能是也可能不是Authorized
来访问某个页面或资源。如果是这样的话,那么我应该返回一个http状态代码403禁忌。这就是[Authorize]
属性发挥作用的地方。
虽然这是我所理解的,但这两个过滤器的行为并不像我想的那样起作用。也许是因为我缺乏理解..。
例如:新的Authentication
过滤器似乎没有识别(或考虑到) [AllowAnonymous]
属性。在我看来,应该是这样。
另一方面,旧的[Authorize]
属性确实识别(并考虑到) [AllowAnonymous]
属性。
最后,我不确定这是否会对你有所帮助,还是会让你更困惑,但我仍在与他们玩耍,以充分把握它。
发布于 2014-02-05 23:06:49
授权和认证之间的基本区别是,授权是检查您是否被“授权”去做某件事或访问某件事情的过程。认证就是首先检查你是谁,或者确认你确实是你所说的那个人(也就是说,你是‘真实的’)。
授权通常是通过查看用户角色(链接到您的身份)来完成的,如果其中任何角色对所访问的功能都满意的话。身份验证通常是通过检查您的密码是否与您的用户名相匹配(最好是以加密形式存储的密码)来完成的。你的证书是正确的。当然,这依赖于假设您的密码是秘密的,所以只有您知道您的密码。
然而,扩展身份验证方案也是可能的,就像Facebook服务器说您确实是具有给定用户名的人(正如您以前登录的那样)。一种称为单点登录(SSO)的机制。这些不同的场景可以通过(可能是自定义)身份验证过滤器来实现。
到目前为止,我只给出了一些定义。但总括而言,原则上,身份验证不会查看您的用户角色,而授权只会查看您的用户角色。还请注意,只有在身份验证完成后才能进行授权。这就是为什么身份验证过滤器优先于授权筛选器的原因。它还显示,您可以在同一方法上使用这两个属性,因此它通常不是身份验证或授权之间的选择,而是可以同时使用!
没有指定任何[Authorized]
属性的普通Roles=
属性可能是最令人困惑的,因为这只是检查您是否登录,例如进行身份验证。因此,这可以看作是身份验证。但身份验证实际上在此之前就已经进行了。身份验证过滤器现在只添加到每个MVC5中,因为在身份验证几乎总是通过一种技术完成之前:您在(成员资格)登录后获得的ASP.NET auth cookie。由于oAuth和其他SSO登录方法已经成为主流,新的auth过滤器提供了更容易实现替代方案的钩子。比如:“如果Facebook说没关系的话,那就设置饼干吧”)。
发布于 2014-04-16 07:07:21
在MVC 5之前,身份验证是通过授权属性完成的。现在,它们在MVC 5中分离。身份验证筛选器在授权筛选器之前执行。我们可以通过从身份验证和动作过滤器中派生新的过滤器来编写自定义身份验证过滤器。然后,如果需要,可以更改请求中的用户主体。对于特定行动的执行,人们可能需要其他的主体,在那个时候它是非常有用的。
https://stackoverflow.com/questions/19859221
复制相似问题