.net core之认证

一般在应用程序中,安全分为前后两个步骤:验证和授权

验证:负责检查当前请求者的身份;

授权:根据验证得到的身份决定当前请求者是否能够访问期待的资源。

验证包含3个操作:

1.Authenticate验证

   验证操作负责基于当前请求的上下文,使用来自请求中的信息,例如请求头、Cooke等等来构造用户标识。构建的结果是一个AuthenticateResult对象,它指示了验证是否成功,如果成功的话,用户标识将可在验证票据中找到。

  常见的验证包括:

   a.基于Cookie的验证,从请求的Cookie中验证用户

   b.基于JWT bearer的验证,从请求头中提取JWT令牌验证

2.Challenge质询

   授权管理阶段,如果用户没有得到验证,所期望访问的资源要求必须得到验证的时候,授权服务会发出质询。例如,当匿名用户访问授权资源的时候,或者当用户点击登录链接的时候。授权服务会通过质询来响应用户。

 例如:

    a.基于Cookie的验证会将用户重定向登录页面;

    b.基于JWT Bearer的验证会返回一个带有www-authenticate:bearer响应头的401响应来提醒客户端需要提供访问凭据

3.Forbid拒绝

  在授权管理阶段,如果用户已通过验证,但是对于其访问的资源并没有得到许可,此时会使用拒绝操作。

例如:
a.Cookie验证模式下,已经登录但是没有访问权限的用户,被重定向到一个提示无权访问的页面;

b.JWT验证模式下,返回403;

c.在自定义验证模式下,将没有权限的用户重定向到申请资源的页面

拒绝访问处理应该让用户知道已通过验证,但是没有权限访问请求的资源。当前场景下,验证需要提供的基本功能就包括了验证和验证失败后的拒绝服务两个操作。在asp.net core中,验证被称为Authenticate,拒绝被称为Forbid。在供消费者访问的网站上,如果我们希望在验证失败后,不是像API一样直接返回一个错误页面,而是将用户导航到登录页面,那么,就还需要增加一个操作,这个操作的本质是希望用户再次提供安全凭证,在asp.net core中,这个操作被称为Challenge。这3个操作结合在一起,就是验证最基本的要求。

你可能感兴趣的:(.net core之认证)