新的身份验证和以前的授权过滤器有什么区别?。我看不出有什么不同。我一直用:[Authorize(Roles = "Admin, User")]
您什么时候想使用身份验证过滤器?以及何时使用授权?
有人可以解释一下区别吗?样品会很棒。谢谢
新的身份验证和以前的授权过滤器有什么区别?。我看不出有什么不同。我一直用:[Authorize(Roles = "Admin, User")]
您什么时候想使用身份验证过滤器?以及何时使用授权?
有人可以解释一下区别吗?样品会很棒。谢谢
你可以在这里找到一篇文章:
我也在这里创建了一个类似的帖子:
虽然我得到的答案很好地澄清了一些事情,但我仍然对如何使用它有点困惑,但更多的是预期的行为(如果你阅读我的帖子,你会看到)。
简而言之,新Authentication
过滤器在旧过滤器之前触发Authorization
。
此外,据我了解,身份验证将是检查用户是否在您的网站上通过身份验证的好地方。换句话说,那个用户是否在某个时候给了我他的凭据,让我在数据库中查找它们。如果答案是肯定的,那么很好……继续。
如果答案是否定的,那么用户没有经过身份验证,这反过来,我应该返回一个 http 状态代码401 Unauthorized。
至于Authorization
,我的理解是,用户是隐式认证的,他可能会也可能不会Authorized
访问某个页面或资源。如果是这种情况,那么我应该返回一个 http 状态代码403 Forbidden。这就是[Authorize]
属性发挥作用的地方。
尽管这是我所理解的,但这两个过滤器的行为并没有像我认为的那样工作。可能是我不够了解造成的……
例如:新Authentication
过滤器似乎没有识别(或考虑)该[AllowAnonymous]
属性。在我看来,应该如此。
另一方面,旧[Authorize]
属性确实识别(并考虑)了该[AllowAnonymous]
属性。
最后,我不确定这是否会帮助您或使您更加困惑,但我仍在与他们玩耍以完全掌握它。
那么授权和身份验证之间的基本区别在于,授权是检查您是否被“授权”做某事或访问某事的过程。身份验证首先是检查您是谁,或者检查您确实是您所说的那个人(即您是“真实的”)。
授权通常是通过查看您的用户角色(与您的身份相关联)以及它们中的任何一个是否满足访问的功能来完成的。身份验证通常通过检查您的密码是否与存储的密码(最好是加密形式)与您的用户名相匹配来完成。例如,您的凭据是正确的。这当然依赖于您的密码是秘密的假设,因此只有您知道您的密码。
但是,扩展身份验证方案也是可能的,例如 Facebook 服务器说您确实是具有给定用户名的人(正如您之前使用他们登录的那样)。一种称为单点登录 (SSO) 的机制。正是这些不同的场景可以通过(可能是自定义的)身份验证过滤器来实现。
到目前为止,我只给出了一些定义。但总结一下;原则上,身份验证不会查看您的用户角色,而授权只会查看您的用户角色。另请注意,授权只能在身份验证完成后进行。这就是身份验证过滤器优先于授权过滤器的原因。它还表明您可以在同一个方法上使用这两个属性,因此通常不是在身份验证或授权之间进行选择,但您可以同时使用两者!
[Authorized]
没有指定任何属性的普通属性Roles=
可能最令人困惑,因为这只是检查您是否已登录,例如已通过身份验证。所以这可以看作是身份验证。但在此之前,实际上已经发生了身份验证。身份验证过滤器现在仅在每个 MVC5 中添加,因为在身份验证之前几乎总是通过一种技术完成:您在(会员身份)登录后获得的 ASP.NET 身份验证 cookie。现在 oAuth 和其他 SSO 登录方法已成为新身份验证的主流过滤器提供了更容易实现替代方案的钩子。喜欢:'如果 Facebook 说没问题,就设置 auth cookie' :)。
在 MVC 5 之前,身份验证是通过授权属性完成的。现在这些在 MVC 5 中是分开的。身份验证过滤器在授权过滤器之前执行。可以通过从身份验证和操作过滤器派生新过滤器来编写自定义身份验证过滤器。然后,如果需要,可以更改请求中的用户主体。例如,为了执行特定的操作,可能需要其他委托人,这在当时是非常有帮助的。