.. back to home

Asp.net Auth 身份验证与授权基本认识


1. 英语单词 Authentication vs. Authorization

Authentication 一般指身份验证,又称 “验证”、“鉴权”,是指通过一定的手段,完成对用户身份的确认。

Authorization 一般是授权、委托的意思,向… 授予职权或权力许可,批准等意思。

2. 计算机基础

2.1 Authentication

身份验证是一个过程,用户提供凭据,然后将其与操作系统、数据库、应用程序或资源中存储的凭据进行比较。如果它们匹配, 则用户将成功进行身份验证,然后可以在授权过程中执行他们被授权执行的操作。

2.2 Authorization

授权是指确定允许用户执行哪些操作的过程。

3. asp.net 中的身份验证

3.1 Authentication scheme 身份验证方案

身份验证方案 = 身份验证处理程序 + 用于配置处理程序的特定实例的选项。

在 ASP.NET Core 中,身份验证由身份验证服务 IAuthenticationService 处理,该服务由身份验证中间件使用。身份验证服务使用注册的身份验证处理程序来完成与身份验证相关的操作。

注册的身份验证处理程序及其配置选项称为“方案(schemes)”。

身份验证方案通过在 Program.cs 中注册身份验证服务来指定。

1builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
2                .AddJwtBearer(JwtBearerDefaults.AuthenticationScheme,
3                    options => builder.Configuration.Bind("JwtSettings", options))
4                .AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
5                    options => builder.Configuration.Bind("CookieSettings", options));

身份验证方案可以选择哪个身份验证处理程序负责生成正确的声明集。有关详细信息,请参阅使用特定方案授权

3.1.1 Cookie和JWT(JSON Web Token)

Cookie和JWT(JSON Web Token)都是用于在Web应用程序中进行身份验证和授权的工具,但它们有一些关键的区别。

  • Cookie:

    • 存储位置: Cookie是在客户端存储的小型文本文件,存储在用户的浏览器中。每次用户请求与网站相关的内容时,浏览器都会自动将相关的Cookie信息发送到服务器。
    • 安全性: Cookies在传输过程中可能被窃取,因此如果存储敏感信息,需要采取安全措施,例如启用HTTPS。
    • 服务器端状态: Cookies通常用于在服务器端保持会话状态。服务器在响应客户端的请求时,可以发送一个包含会话标识符的Cookie,以便在后续请求中标识用户。
    • 同源策略: Cookie受同源策略的限制,只能被设置和读取与设置Cookie的域相同的网站。
  • JWT:

    • 存储位置: JWT是一种轻量级的、跨平台的令牌,通常以字符串的形式传递在HTTP请求的头部中或作为URL参数。它存储在客户端,但服务器不保存该令牌的状态。
    • 安全性: JWT使用签名来保护数据的完整性,但并不加密数据。因此,不应在JWT中存储敏感信息,或者在使用时应该使用加密算法来保护其内容。
    • 无状态: 与Cookie不同,JWT是无状态的,服务器不需要在存储会话信息上做任何事情。JWT本身包含了所有需要的信息,因此减轻了服务器的负担。
    • 跨域: JWT可以在不同域之间传递,因为它是作为一个字符串传递的,不受同源策略的限制。

在选择使用Cookie还是JWT时,需要根据具体的需求和安全要求来进行权衡。一般来说,JWT更适合用于构建无状态的分布式系统,而Cookie更适合用于在服务器端保持会话状态。

相关:

同源策略

同源策略(Same-Origin Policy)是浏览器中一种安全机制,用于限制一个网页文档或脚本如何能够与来自另一个源(域、协议或端口)的资源进行交互。这个策略有助于防止恶意网站通过恶意脚本访问其他网站上的敏感信息。
同源策略的基本原则包括:

  • 协议相同: 两个页面的协议必须相同(http://和https://被视为不同源)。
  • 域名相同: 两个页面的域名必须相同。
  • 端口相同: 如果一个页面使用了非标准端口(例如http://example.com:8080),那么另一个页面必须使用相同的端口。

如果不满足同源策略的这些条件,浏览器就会限制页面中的脚本、XMLHttpRequest请求和其他资源的访问。这有助于防止恶意网站通过在用户浏览器中执行恶意代码来访问用户的敏感信息。

同源策略的限制对于Web安全至关重要,但在一些情况下,需要进行跨域资源共享(CORS)设置,以允许一些跨域请求。CORS允许服务器定义哪些域可以访问其资源,以及哪些HTTP方法是允许的。这通过在HTTP头部中添加特定的标记来实现。

3.2 Authentication handler 身份验证处理程序

  • Is a type that implements the behavior of a scheme. 是一种实现方案行为的类型。
  • Is derived from IAuthenticationHandler or AuthenticationHandler<TOptions>. 派生自 IAuthenticationHandler 或 AuthenticationHandler。
  • Has the primary responsibility to authenticate users. 负有对用户进行身份验证的主要责任。

根据身份验证方案的配置和传入请求上下文,身份验证处理程序:

Construct AuthenticationTicket objects representing the user’s identity if authentication is successful. 如果身份验证成功,则构造代表用户身份的 AuthenticationTicket 对象。

Return ’no result’ or ‘failure’ if authentication is unsuccessful. 如果身份验证不成功,则返回“无结果”或“失败”。

Have methods for challenge and forbid actions for when users attempt to access resources: 当用户尝试访问资源时提供质询和禁止操作的方法:

  • They’re unauthorized to access (forbid). 他们无权访问(禁止)。
  • When they’re unauthenticated (challenge). 当他们未经身份验证时(挑战)。