相反,它通常是通过GSSAPI调用的,并且是主要的用法,例如SASL GSSAPI方法、HTTP Negotiate(GSSAPI)身份验证方法和SSH GSSAPI身份验证方法 。
有趣的是,Kerberos的当前版本Kerberos 5于1993年发布,因此仅依赖对称加密,避免了对非对称加密的依赖 。如果Kerberos是今天设计的,则它可能会使用公钥加密,并且对中心化身份验证服务器的依赖会稍少一些 。
不幸的是,Web的极速增长看来已经侵蚀了所有非web协议(无论是身份验证还是其他用途)的发展空间 。(但Kerberos 5仍然是安全的 。)
单点登录协议:Web对于Web SSO协议,客户端到身份验证服务器协议一直是标准的Web形式,也就是表单-cookies形式 。客户端到应用程序服务器的身份验证协议却很特殊 。
通常,当应用程序服务器希望对客户端进行身份验证时,它将通过HTTP重定向将客户端引向SSO身份验证服务器 。如果客户端尚未通过中心化验证,则会要求它进行验证;否则,如果客户端已经完成单点登录,则流程将继续进行而无需用户干预 。
在对用户完成身份验证之后,身份验证服务器会通过另一个HTTP重定向将客户端引回到应用程序服务器 。返回请求包含从身份验证服务器传输到应用程序服务器的身份验证信息,以建立客户端的凭据 。该数据本身将以某种方式进行身份验证,以防止客户端对其修改 。由于信息从身份验证服务器到应用程序服务器的传递是通过客户端进行的,因此客户端就像是携带花粉的蜜蜂 。在某些SSO实现中,应用程序服务器可以直接回调身份验证服务器,以验证它已通过客户端接收到的信息 。在其他SSO实现中,通过客户端从身份验证服务器传递到应用程序服务器的信息是加密保护的,不需要进一步验证 。
应当注意,上文不是对特定SSO协议的描述,而是对所有常用技术的概括 。由于Web应用程序仅需要符合标准的Web浏览器,因此对在Web平台之上实现的协议进行标准化的要求较少,于是出现了许多专有的Web SSO实现 。
但一些标准还是出现了 。今天流行的标准有:
- SAML2,安全性断言标记语言第2版,一种XML的误用,用于表达加密签名语句,语句中包含受验证方和验证用途的信息,并在域之间传递此类语句 。它很流行,受AWS for SSO支持 。
- OAuth,一种基于HTTP的协议,用于促成网站之间的授权流 。它侧重于授权而非验证,但是现在也经常用于验证,尤其是与OpenID Connect扩展一起使用时 。它很流行,受AWS for SSO支持 。OpenID Connect扩展添加了身份验证功能,并允许在身份验证期间将用户信息(例如电子邮件地址等)传递到网站 。(请注意,OpenID Connect是一种位于OAuth之上的技术,与OpenID 2没有任何关系 。)
- OpenID2,一种Web SSO协议,它使人们可以验证对特定URL的控制 。(请注意,这与基于OAuth构建的OpenID Connect无关,两者适用的用例差异巨大 。)
- LID,一种Web SSO协议,与OpenID 2类似,是OpenID 2的同期竞争对手,但是不太流行 。
PAMPAM(可插入身份验证模块)是nix领域中本地身份验证的事实标准 。它在linux上普遍用于本地身份验证,并且在其他nix操作系统上也很流行 。PAM提供了基于插件的身份验证功能;PAM插件是动态链接库,可以在运行时加载以提供任意身份验证逻辑 。使用何种PAM插件由系统配置确定,因此可以根据需要重新配置PAM 。
尽管PAM具有高度可扩展性,但它被设计为支持终端交互式登录应用程序,因此受到了限制 。PAM模块向用户提交一系列零个或多个交互式提示(例如“Password:”),因此不能支持Kerberos那样的SSO身份验证方法(尽管有的PAM模块可以提示用户输入Kerberos密码并执行初始Kerberos登录) 。
虽然PAM主要是为了支持终端交互式登录而设计的,但将PAM用作某些应用程序协议的后端(例如,用作SASL PLAIN的后端)也是可行且普遍的 。但是,这要求应用程序服务器理解(或正确猜测)PAM模块发出的线路提示的语义 。例如,Dovecot IMAP服务器假定,如果PAM模块要求输入没有字符回显的行,则说明它要求输入密码;如果该模块要求输入一行启用了字符回显的内容,则它是在要求用户名 。因此,虽然PAM模块可以被编写为支持通过TOTP硬件密钥进行身份验证,并在终端上提示输入六位数的值,但非终端应用程序(例如SASL应用程序)无法支持它,除非专门设计为支持这种模块的提示 。
推荐阅读
- 根据判断PC浏览器类型和手机屏幕像素自动调用不同CSS
- 详解飞书新功能,如何让开发者“爽”起来?
- java中常见的六种线程池详解
- 如何挑选墨鱼
- 椰子没打开可以放多久?
- 翡翠手镯|翡翠不同的瑕疵造成的影响也不同,该怎样分辨?快来分辨不同属性
- 玻璃杯适合泡什么茶,泡不同的茶定要用不同的茶具吗
- linux网络编程常见API详解
- 详解三大编译器:gcc、llvm 和 clang
- 不同的场合该如何泡茶,如何泡茶
