客户端到应用程序的身份验证框架:HTTPHTTP定义自己的身份验证框架,并具有自己的方法集 。可以说,HTTP避免SASL的原因在于其无状态性和SASL不太相称 。由于HTTP设计的运行机制是让客户端发送单个请求块,然后由服务器发送单个响应,因此HTTP协议不适用于SASL设想的身份验证完成之前的来回数据交换 。
此外,对于每个请求都必须重复这种交换 。
服务器通过发送一个401 Authorization Required错误,和WWW-Authenticate标头来请求身份验证以访问资源 。该标头包含:
- 所需的身份验证方法;
- “域名称”,提供对身份验证域的描述;
- 必须为给定方法指定的其他参数 。与SASL不同,一般来说一台给定服务器只有一个方法(虽说HTTP RFC确实允许服务器通过发送多个WWW- Authenticate标头来支持多个方法,每个方法一个标头,但这种情况很少见) 。然后,客户端使用包含相同方法名称和方法特定身份验证数据的Authorization标头重新发出其请求 。(请注意,HTTP使用术语authorization-授权,而不是authentication-身份验证 。)
- Basic(基本),以纯文本形式指定用户名和密码;
- Digest(摘要),指定一个用户名并以质询-响应模式哈希密码;
- Negotiate(协商),允许使用GSSAPI,并实质上在HTTP身份验证内称为SPNEGO的GSSAPI之上,重新实现了SASL风格的方法协商模式 。因为它涉及来回交换,所以可能需要多个请求,直到身份验证成功为止 。Windows通常将“Negotiate/SPNEGO”用于NTLM或Kerberos身份验证 。
- keyboard-interactive(交互式键盘),通过任意终端提示登录;
- public-key(公钥),客户端证明其握有指定私钥;
- gssapi,通过Kerberos登录(参见下文) 。
- 完全遵循上下文身份验证(例如TLS客户端证书或IP地址身份验证)(例如SASL EXTERNAL) 。
- 以明文形式发送用户名和密码,其中安全性(如果有的话)由封装的安全通道提供,并且在任何情况下,应用程序服务器最终以明文形式获得密码(例如SASL PLAIN;HTTP Basic;SSH keyboard- interactive) 。
- 质询-响应方案,其中服务器发出质询随机数,客户端将密码哈希或其他构造应用于随机数和密码来响应质询(例如SASL CRAM-MD5) 。
- 非对称密码方案,其中客户端在不传输私钥的情况下证明其拥有私钥(例如SSH public-key;TLS客户端证书) 。
- Shared-secret(共享秘密)方案,例如TLS-PSK 。
- 零知识证明方案,例如SRP 。这些加密方式整洁但很少使用,并且还是会将身份验证协议与服务器上哈希密码的方法紧密耦合 。
- 单点登录协议的客户端到应用程序部分 。
这些协议经常用于网络访问场景中,其中“应用程序”服务器是网络设备,如路由器、交换机或Wi-Fi接入点 。由于我们不希望网络中的每个Wi-Fi接入点都保留身份验证数据库的副本,因此后端协议允许将身份验证决策外包给一个中心化授权源 。因此,后端协议必须与某种客户端到应用程序的身份验证协议结合使用:在客户端和应用程序之间使用客户端到应用程序协议,在应用程序和身份验证服务器之间使用后端协议 。
推荐阅读
- 根据判断PC浏览器类型和手机屏幕像素自动调用不同CSS
- 详解飞书新功能,如何让开发者“爽”起来?
- java中常见的六种线程池详解
- 如何挑选墨鱼
- 椰子没打开可以放多久?
- 翡翠手镯|翡翠不同的瑕疵造成的影响也不同,该怎样分辨?快来分辨不同属性
- 玻璃杯适合泡什么茶,泡不同的茶定要用不同的茶具吗
- linux网络编程常见API详解
- 详解三大编译器:gcc、llvm 和 clang
- 不同的场合该如何泡茶,如何泡茶
