摘要:提升用户体验:减少需要记忆的密码数量,避免重复登录。简化管理:管理员可以在一个中心点(如Active Directory)管理用户账户和访问权限,无需为每个系统单独管理。增强安全:集中化的认证意味着更严格的密码策略、更快的漏洞响应(如统一禁用账户)和更全面的审
是什么?
SSO是一种会话和用户认证服务,允许用户使用一组凭据(如用户名和密码)登录一次,即可访问多个相关的软件系统,而无需重新认证。
核心目标:
提升用户体验:减少需要记忆的密码数量,避免重复登录。简化管理:管理员可以在一个中心点(如Active Directory)管理用户账户和访问权限,无需为每个系统单独管理。增强安全:集中化的认证意味着更严格的密码策略、更快的漏洞响应(如统一禁用账户)和更全面的审计日志。如何工作?
SSO的实现需要一种协议,SAML和OAuth都是实现SSO的流行协议。
是什么?
SAML是一个基于XML的开放标准,用于在身份提供商(IdP) 和服务提供商(SP) 之间交换认证和授权数据。它是最经典的企业级SSO解决方案。
核心角色:
主体 (Principal / User): 想要访问服务的用户。身份提供商 (Identity Provider, IdP): 负责对用户进行认证并向SP发送用户身份信息的服务(例如:公司的AD FS、Okta、Azure AD)。服务提供商 (Service Provider, SP): 用户想要访问的应用程序或服务(例如:Salesforce、Workday、Confluence)。工作流程 (SAML 2.0 Flow):
这是一个高度简化的流程:
安全标准与特性:
XML数字签名:确保SAML断言的完整性和真实性。断言有效期:断言具有很短的有效期(几分钟),防止重放攻击。目标限制:断言指定了目标受众(SP),防止断言被用于其他SP。HTTPS:整个流程必须在TLS/SSL通道上进行,以保证传输安全。元数据交换:IdP和SP通过XML元数据文件预先交换配置信息(如公钥、端点URL),建立信任关系。典型应用场景:
企业员工访问内部SaaS应用(如Salesforce、Box、Office 365)。
是什么?
OAuth 2.0是一个授权框架,它允许用户授权一个第三方应用(Client)访问自己在资源服务器(如Facebook、Google、GitHub)上存储的特定信息,而无需将用户名和密码交给第三方应用。
核心角色:
资源所有者 (Resource Owner): 用户。客户端 (Client): 想要访问用户资源的第三方应用(例如:一个想访问你Gmail通讯录的邮件合并工具)。授权服务器 (Authorization Server): 验证用户身份并颁发访问令牌(Access Token)的服务(通常是IdP的一部分,例如:Google的登录页面)。资源服务器 (Resource Server): 存储用户数据的API服务器(例如:Google的API,存放着你的个人资料信息)。工作流程 (授权码流程 - 最安全常见):
用户发起请求:用户点击第三方应用(Client)中的“使用Google登录”按钮。重定向到授权服务器:Client将用户重定向到授权服务器的URL,并带上自己的ID、请求的权限范围(scope)和回调地址(redirect_uri)。用户认证与同意:用户在授权服务器上登录(如果未登录),并看到一个同意屏幕,显示“应用X希望访问你的个人资料和邮箱”。用户点击“同意”。颁发授权码:授权服务器将用户浏览器重定向回Client事先提供的redirect_uri,并在URL中附带一个短期有效的授权码(Authorization Code)。交换访问令牌:Client(在后端,不可见)使用这个授权码、自己的客户端密钥(Client Secret)和redirect_uri,向授权服务器请求访问令牌(Access Token)。颁发访问令牌:授权服务器验证所有信息无误后,向Client返回一个访问令牌(Access Token)(通常是一个JWT)。访问资源:Client现在可以使用这个Access Token作为凭证,向资源服务器的API发起请求(例如,在请求头中加入Authorization: Bearer )来获取用户的数据。安全标准与特性:
访问令牌 (Access Token): 代替用户凭据的密钥,有作用域(scope)和有效期限制。刷新令牌 (Refresh Token): 用于在Access Token过期后获取新的Access Token,而无需用户再次交互,存储在Client后端,更安全。不同的授权流程:针对不同类型的客户端(如Web应用、移动应用、单页应用、命令行工具)有不同的优化流程(如授权码流程、隐式流程、设备流程等)。Scope(作用域):精确控制第三方应用可以访问的权限范围(例如:read:profile 或 photos:read)。客户端认证:确保令牌是颁发给合法的、已注册的客户端。特性SAMLOAuth 2.0主要目的认证 (Authentication) - “你是谁?”授权 (Authorization) - “用户可以做什么?”协议格式XML通常是 JSON (JWTs)主要使用场景企业级SSO(员工访问内部应用)第三方API授权(用户授权App访问其数据)由于OAuth 2.0只做授权不做认证,为了弥补这一缺口,社区在OAuth 2.0之上创建了OpenID Connect (OIDC) 协议。
OIDC = OAuth 2.0 + Identity它在OAuth流程中增加了一个标准化的身份层。授权服务器不仅返回Access Token,还会返回一个ID Token。ID Token 是一个JWT,其中包含了用户的身份信息(如用户ID、姓名、邮箱等)。正是OIDC的出现,使得OAuth 2.0能够完美地用于实现面向消费者的SSO(例如“使用Google登录”)。你通过OAuth流程授权,同时通过OIDC获得了用户的身份信息,完成了认证。最终总结:
来源:科技站长