认证不应与授权混淆,这是网络应用安全领域中的两个不同概念。以下是两者的区别:
认证
认证是验证或确定访问网络应用的用户或实体身份的过程。
它确保用户在被授予访问系统或特定资源之前,是他们所声称的身份。
认证通常在会话开始时或访问应用程序受限区域时执行。
常见的认证方法或策略包括用户名和密码、生物特征认证、双因素认证 (2FA) 和证书等。
其主要目标是建立信任,并确保只有授权的个人或实体可以访问该应用程序。
授权
授权是向经过身份验证的用户或实体授予或拒绝访问权限和权限的过程。
一旦通过认证建立了用户的身份,授权就决定他们被允许在应用程序内访问哪些操作或资源。
授权基于预定义的规则、策略或与用户角色或特定属性相关的权限。
它涉及定义和实施访问控制来保护敏感数据和功能。
授权机制可以包括基于角色的访问控制 (RBAC)、基于属性的访问控制 (ABAC) 和其他细粒度的权限模型。
授权的主要目标是确保经过身份验证的用户具有适当的特权,以在应用程序内执行他们预期的操作,同时防止未经授权的访问。
认证和授权都是网络应用安全的关键组成部分,它们共同保护数据、维护系统完整性并防止未经授权的访问或滥用。
这里是你可能遇到的最常见的认证策略:
密码 (用户名/密码):
通常称为用户名和密码的密码,已经被广泛用于认证。用户在登录过程中提供他们的用户名和密码。服务器将输入的凭据与存储的与该用户名相关联的凭据进行比较。如果凭据匹配,则授予用户访问权限。但是,密码具有弱密码、密码重用和基于密码的攻击等漏洞,这会危及安全性。
这种策略需要大量的人工管理,如果处理不当,后果可能会很严重。一个错误方法的直接指标是例如:不使用安全协议如 https,在数据库中以明文存储密码而不进行哈希或加盐等。
暴力破解攻击、密码猜测和凭据填充是常见的认证漏洞。暴力破解攻击是指有系统地尝试所有可能的组合来猜测密码。密码猜测是指根据个人信息、社会工程或钓鱼攻击尝试猜测用户的密码。凭据填充是指从一个站点自动注入到另一个站点的被盗用户名和密码。实施强密码策略、账户锁定、双因素认证 (2FA)、代码生成器、一次性密码 (OTP) 和 CAPTCHA 等机制可以减轻这些漏洞。
单点登录 (SSO) 和联合身份认证:
联合身份认证 (FedCM) 是一种使用户能够使用一组凭证登录多个网络服务或应用程序的方法。它减少了用户为不同服务记忆多个用户名和密码的需要。用户向身份提供者 (IdP) 进行身份验证,例如 Twitter、Facebook、Google,后者会发出身份验证令牌或断言。然后,各种网络服务可以使用该令牌来验证用户的身份,而无需直接管理用户凭据。
在实施 FedCM 时,网络用户在认证过程中会被网络服务重定向到 IdP。IdP 会对用户进行身份验证并发出身份验证令牌或断言。然后,网络服务会验证令牌的有效性,其中包括检查其到期时间、签名和其他安全措施。SAML(安全断言标记语言) 和 OIDC(OpenID Connect) 等标准化协议有助于 IdP 和网络服务之间的安全通信。
FedCM 提供了改善用户体验、减少密码疲劳和集中管理用户凭据等优势。它简化了身份验证过程,通过与可信 IdP 集中身份验证管理来增强安全性,并启用跨多个应用程序的单点登录 (SSO)。
单点登录允许用户进行一次身份验证,然后无需重新输入凭据即可访问多个应用程序或服务。SSO 通过减少用户记忆和管理多个凭据的需要来简化身份验证过程、改善用户体验并提高生产力。它还可以帮助组织实施一致的安全策略和集中化的用户管理。
SSO 有各种实现,包括基于 OpenID Connect (OIDC) 的 SSO 和 SAML 2.0。OIDC 是 OAuth 2.0 之上的身份层,使用基于 JSON 的令牌 (例如 JWT 令牌) 提供了一种现代灵活的 SSO 方法。SSO 通常依靠会话管理技术在不同的应用程序之间维护用户身份验证。常用的方法包括使用安全会话令牌、Cookie 或持久身份验证令牌。
SSO 集成需要 IdP 和 SP(服务提供者) 或你的网络服务之间的协调,包括建立信任、交换元数据以及实现必要的协议和标准。Azure Active Directory、Okta 或 Keycloak 等联合身份提供商为组织提供 SSO 身份和访问管理解决方案。
为了在多个域或应用程序之间实现 SSO,在身份提供者 (IdP) 和服务提供者 (SP) 之间交换身份验证和授权数据时,使用 SAML。IdP 认证用户并发出包含用户身份信息的 SAML 断言。SP 根据 IdP 提供的断言授予对其资源或服务的访问权限。SAML 断言包含有关用户身份、属性和认证状态的信息。
SSO 和 FedCM 简化了用户的身份验证过程,通过减少记忆和管理多个凭据的需要来提高用户体验,并通过消除重复登录来提高生产力。它还可以帮助组织实施一致的安全策略和集中化的用户管理。
需要考虑的因素包括仔细选择可靠的 IdP、确保安全的令牌处理以及在认证之后正确管理授权。
代码交换的证明密钥 (PKCE)
PKCE 是 OAuth 2.0 授权代码流的一个安全扩展,可以防止授权代码拦截攻击。
OAuth 2.0 的授权代码流涉及交换授权代码以获取访问令牌。这要求客户端将客户端 ID 和客户端机密发送到授权服务器以获取访问令牌。由于网络、本地和移动应用程序在安全存储和交换客户端机密方面面临安全挑战,这本身容易受到“授权代码拦截攻击”。PKCE 的引入是为了解决这个问题,方法是在授权代码流中添加一个额外的安全层。
使用 PKCE 时,客户端不发送客户端机密,而是生成一个随机的代码验证器并将其转换为代码质询。代码质询与授权请求一起发送到授权服务器。服务器将代码质询与生成的授权代码相关联。在交换授权代码以获取访问令牌时,客户端发送原始代码验证器,以证明其拥有该机密代码。
PKCE 帮助防止授权代码在传输中被拦截。即使授权代码被拦截,也只有启动授权流程的客户端才能获得访问令牌。
跨站点脚本 (XSS) 和跨站点请求伪造 (CSRF):
XSS 是一种漏洞,允许攻击者向其他用户查看的网页中注入恶意脚本。当应用程序在将用户提供的输入呈现为 HTML 响应的一部分之前没有适当地验证或过滤时,就会发生这种情况。
CSRF 是一种漏洞,允许攻击者欺骗经过身份验证的用户在网站或 Web 应用程序上执行不需要的操作。当应用程序没有充分验证请求的源时,就会发生这种情况,从而允许恶意行为者伪造请求代表毫不知情的用户。
讨论防范措施,比如输入验证、输出编码和反 CSRF 令牌,以减轻这些漏洞。
安全头:
安全头在通过提供针对各种攻击的额外保护层来增强 Web 应用程序的安全方面发挥着关键作用。示例包括内容安全策略 (CSP)、严格传输安全 (HSTS)、X-Content-Type-Options、Referrer-Policy 和 X-Frame-Options。
安全会话管理:
实施安全的会话管理实践有助于保护用户帐户、敏感数据,并确保用户会话不会遭到破坏。必须遵循安全编码实践,利用安全会话存储机制,包括会话过期、安全会话存储和会话固定预防。
Web 安全是一个需要持续学习的广泛主题。这里讨论的实现只是对常用策略的高级概述。我鼓励您研究并学习有关此主题的更多信息。