# CAS、OAuth2.0、OIDC、SAML、JWT学习

CAS、OAuth2.0、OIDC、SAML、JWT

CAS

1、CAS协议是什么?

CAS(Central Authentication Service)协议是一种用于Web应用的单点登录(Single Sign-On, SSO)解决方案。它的主要特点和功能包括:

  • 单点登录:用户只需要进行一次身份验证,就可以访问多个相互信任的应用系统,无需对每个系统单独进行身份验证。
  • 基于票证的认证机制:CAS协议采用票证(Ticket)作为用户身份的证明,而不是直接使用用户名和密码。这种方式提高了安全性,因为敏感信息不会在不同服务间传递。
  • 集中式管理:CAS服务器作为集中式的认证中心,负责用户的认证工作。所有需要认证的应用程序都依赖于这个中心来验证用户的身份。
  • 独立性和开放性:CAS协议是独立的,不依赖于特定的技术平台或语言。同时,它也是一个开放标准,任何人都可以根据其规范实现自己的CAS客户端或服务器。
  • 增强的安全性:除了基本的单点登录功能外,CAS协议还提供了额外的安全特性,比如支持多因素认证、会话管理和安全的票证处理等。
  • 用户属性支持:最新的CAS协议规范增强了对用户属性的支持,可以通过新的端点返回用户的详细信息,这有助于应用程序根据用户的特定属性提供个性化的服务。

2、CAS协议具体的认证流程

  1. 用户请求受保护资源
  • 用户访问应用:用户尝试访问一个受保护的资源(例如,某个Web应用中的页面)。
  • 应用检查认证状态:应用检查用户是否已经通过CAS认证。如果用户未认证,则应用会将用户重定向到CAS服务器的登录页面。
  1. 重定向到CAS登录页面
  • 应用生成重定向URL:应用生成一个重定向URL,该URL指向CAS服务器的登录页面,并附带一个服务参数(service),该参数包含了用户最初请求的URL。
  • 用户重定向到CAS登录页面:应用将用户重定向到CAS服务器的登录页面。
  1. 用户登录
  • 用户输入凭证:用户在CAS登录页面输入用户名和密码。
  • CAS服务器接收凭证:CAS服务器接收用户提交的凭证。
  1. CAS服务器验证凭证
  • 验证凭证:CAS服务器验证用户提供的凭证。如果凭证有效,CAS服务器会生成一个票据授予票据(Ticket Granting Ticket, TGT),并将其存储在服务器端。
  • 生成服务票据:CAS服务器生成一个服务票据(Service Ticket, ST),并将ST返回给用户。
  1. 用户携带ST返回应用
  • 用户重定向回应用:用户携带ST返回到最初请求的应用。
  • 应用接收ST:应用接收到用户携带的ST。
  1. 应用验证ST
  • 应用发送ST到CAS服务器:应用将ST发送回CAS服务器进行验证,并附带最初的服务参数(service)。
  • CAS服务器验证ST:CAS服务器验证ST的有效性。如果ST有效,CAS服务器会返回一个包含用户信息的响应给应用。
  1. 应用授权访问
  • 应用接收用户信息:应用根据CAS服务器返回的用户信息,决定是否允许用户访问受保护的资源。
  • 用户访问资源:如果用户被授权,应用允许用户访问请求的资源。
  1. 单点注销(可选)
  • 用户请求注销:用户可能在某个应用中请求注销。
  • 应用发起注销请求:应用将用户重定向到CAS服务器的注销页面。
  • CAS服务器注销TGT:CAS服务器注销用户的TGT,并向所有已注册的应用发送注销通知。
  • 应用处理注销通知:各应用接收到注销通知后,清除用户的会话信息,确保用户从所有应用中注销。
User Application CAS Server 请求受保护资源 重定向到CAS登录页面 (附带service参数) 输入凭证 验证凭证 返回Service Ticket (ST) 携带ST返回 验证ST (附带service参数) 返回用户信息 授权访问资源 请求注销 发起注销请求 注销通知 清除会话信息 User Application CAS Server

OAuth2.0

1、OAuth2.0是什么?

OAuth 2.0 是一种广泛使用的授权框架,用于第三方应用获取有限访问权限,以代表用户访问其在其他服务上的数据。它提供了一种标准化的方法,使得应用程序能够在不暴露用户凭据的情况下,获得对用户资源的访问权限。OAuth 2.0 主要用于以下场景:

  1. 第三方应用访问用户数据:允许第三方应用在用户授权的情况下访问用户在其他服务上的数据,例如社交媒体账户、电子邮件等。
  2. API 访问控制:为API提供安全的访问控制机制,确保只有授权的应用能够调用API。
  3. 单点登录(SSO):虽然OAuth 2.0 主要用于授权,但它也可以与OpenID Connect结合使用,实现单点登录功能。
OAuth 2.0 的核心概念
  1. 授权服务器(Authorization Server):负责验证用户身份并颁发访问令牌(Access Token)。
  2. 资源服务器(Resource Server):存储用户数据的服务器,通过访问令牌来验证请求的合法性。
  3. 客户端(Client):请求访问用户资源的第三方应用。
  4. 资源所有者(Resource Owner):通常是指用户,拥有资源的所有权。
  5. 访问令牌(Access Token):客户端用来访问资源服务器上的受保护资源的令牌。
  6. 刷新令牌(Refresh Token):用于在访问令牌过期后获取新的访问令牌。

2、OAuth2.0协议具体的认证流程

1. 授权码模式(Authorization Code)
  • 详细步骤
  1. 用户请求访问资源:用户尝试访问受保护的资源。
  2. 客户端重定向用户到授权服务器:客户端将用户重定向到授权服务器的授权端点,并附带client_id、redirect_uri、scope等参数。
  3. 用户输入凭证并授权:用户在授权服务器上输入凭证并授权客户端访问其资源。
  4. 授权服务器重定向用户回客户端:授权服务器验证用户凭证和授权请求后,将用户重定向回客户端,并附带一个授权码(authorization_code)。
  5. 客户端请求访问令牌:客户端使用授权码向授权服务器请求访问令牌(access_token),并附带client_id、client_secret、redirect_uri和code。
  6. 授权服务器返回访问令牌:授权服务器验证授权码和其他参数后,返回访问令牌和刷新令牌(refresh_token)。
  7. 客户端请求资源:客户端使用访问令牌向资源服务器请求受保护的资源。
  8. 资源服务器返回资源:资源服务器验证访问令牌后,返回资源。
User Client Authorization Server Resource Server 请求访问资源 重定向到授权服务器 (附带client_id, redirect_uri, scope等) 输入凭证并授权 重定向回客户端 (附带authorization_code) 接收authorization_code 使用authorization_code请求access_token (附带client_id, client_secret, redirect_uri, code) 返回access_token和refresh_token 使用access_token请求资源 返回资源 User Client Authorization Server Resource Server
2. 隐式模式(Implicit)
  • 详细步骤
  1. 用户请求访问资源:用户尝试访问受保护的资源。
  2. 客户端重定向用户到授权服务器:客户端将用户重定向到授权服务器的授权端点,并附带client_id、redirect_uri、scope和response_type=token参数。
  3. 用户输入凭证并授权:用户在授权服务器上输入凭证并授权客户端访问其资源。
  4. 授权服务器重定向用户回客户端:授权服务器验证用户凭证和授权请求后,将用户重定向回客户端,并附带访问令牌(access_token)。
  5. 客户端请求资源:客户端使用访问令牌向资源服务器请求受保护的资源。
  6. 资源服务器返回资源:资源服务器验证访问令牌后,返回资源。
User Client Authorization Server Resource Server 请求访问资源 重定向到授权服务器 (附带client_id, redirect_uri, scope, response_type=token) 输入凭证并授权 重定向回客户端 (附带access_token) 接收access_token 使用access_token请求资源 返回资源 User Client Authorization Server Resource Server
3. 客户端凭证模式(Client Credentials)
  • 详细步骤
  1. 客户端请求访问令牌:客户端直接向授权服务器请求访问令牌,并附带client_id、client_secret和grant_type=client_credentials。
  2. 授权服务器返回访问令牌:授权服务器验证客户端凭证后,返回访问令牌。
  3. 客户端请求资源:客户端使用访问令牌向资源服务器请求受保护的资源。
  4. 资源服务器返回资源:资源服务器验证访问令牌后,返回资源。
Client Authorization Server Resource Server 请求access_token (附带client_id, client_secret, grant_type=client_credentials) 返回access_token 使用access_token请求资源 返回资源 Client Authorization Server Resource Server
4. 密码模式(Resource Owner Password Credentials)
  • 详细步骤
  1. 用户提供凭证:用户向客户端提供用户名和密码。
  2. 客户端请求访问令牌:客户端直接向授权服务器请求访问令牌,并附带client_id、client_secret、username、password和grant_type=password。
  3. 授权服务器返回访问令牌:授权服务器验证用户凭证后,返回访问令牌和刷新令牌。
  4. 客户端请求资源:客户端使用访问令牌向资源服务器请求受保护的资源。
  5. 资源服务器返回资源:资源服务器验证访问令牌后,返回资源。
User Client Authorization Server Resource Server 提供用户名和密码 请求access_token (附带client_id, client_secret, username, password, grant_type=password) 返回access_token和refresh_token 使用access_token请求资源 返回资源 User Client Authorization Server Resource Server

OIDC

OIDC协议是什么?

OIDC(OpenID Connect)是一种基于OAuth 2.0的简单身份验证层,用于验证用户身份并获取用户的基本信息。OIDC扩展了OAuth 2.0的授权框架,使其不仅能够授权访问资源,还能提供用户身份验证和用户信息交换的功能。OIDC 主要用于单点登录(SSO)和用户信息管理。

OIDC的核心概念
  • 身份提供者(Identity Provider, IdP):负责验证用户身份并发放ID Token。
  • 客户端(Client):请求用户身份验证的应用程序。
  • 用户代理(User Agent):通常是用户的浏览器,用于与IdP和客户端进行交互。
  • ID Token:一个JWT(JSON Web Token),包含用户的身份信息,用于验证用户身份。
  • 访问令牌(Access Token):用于访问受保护的资源。
  • 用户信息端点(Userinfo Endpoint):提供用户详细信息的API端点。
OIDC的主要功能
  • 用户身份验证:通过IdP验证用户身份,并返回ID Token。
  • 用户信息交换:通过用户信息端点获取用户的详细信息。
  • 单点登录(SSO):用户在一个应用中登录后,可以无缝访问其他应用,无需再次登录。
  • 单点注销(SLO):用户在一个应用中注销后,可以从所有关联的应用中注销。

OIDC协议具体的认证流程

1. 授权码模式(Authorization Code)
  • 详细步骤
  1. 用户请求访问资源:用户尝试访问受保护的资源。
  2. 客户端重定向用户到IdP:客户端将用户重定向到IdP的授权端点,并附带client_id、redirect_uri、scope和response_type=code参数。
  3. 用户输入凭证并授权:用户在IdP上输入凭证并授权客户端访问其资源。
  4. IdP重定向用户回客户端:IdP验证用户凭证和授权请求后,将用户重定向回客户端,并附带一个授权码(authorization_code)。
  5. 客户端请求ID Token和Access Token:客户端使用授权码向IdP请求ID Token和Access Token,并附带client_id、client_secret、redirect_uri和code。
  6. IdP返回ID Token和Access Token:IdP验证授权码和其他参数后,返回ID Token和Access Token。
  7. 客户端请求资源:客户端使用Access Token向资源服务器请求受保护的资源。
  8. 资源服务器返回资源:资源服务器验证Access Token后,返回资源。
User Client Identity Provider (IdP) Resource Server IdP 请求访问资源 重定向到IdP (附带client_id, redirect_uri, scope, response_type=code) 输入凭证并授权 重定向回客户端 (附带authorization_code) 接收authorization_code 使用authorization_code请求ID Token和Access Token (附带client_id, client_secret, redirect_uri, code) 返回ID Token和Access Token 使用Access Token请求资源 返回资源 User Client Identity Provider (IdP) Resource Server IdP
2. 隐式模式(Implicit)
  • 详细步骤
  1. 用户请求访问资源:用户尝试访问受保护的资源。
  2. 客户端重定向用户到IdP:客户端将用户重定向到IdP的授权端点,并附带client_id、redirect_uri、scope和response_type=id_token token参数。
  3. 用户输入凭证并授权:用户在IdP上输入凭证并授权客户端访问其资源。
  4. IdP重定向用户回客户端:IdP验证用户凭证和授权请求后,将用户重定向回客户端,并附带ID Token和Access Token。
  5. 客户端请求资源:客户端使用Access Token向资源服务器请求受保护的资源。
  6. 资源服务器返回资源:资源服务器验证Access Token后,返回资源。
User Client Identity Provider (IdP) Resource Server IdP 请求访问资源 重定向到IdP (附带client_id, redirect_uri, scope, response_type=id_token token) 输入凭证并授权 重定向回客户端 (附带ID Token和Access Token) 接收ID Token和Access Token 使用Access Token请求资源 返回资源 User Client Identity Provider (IdP) Resource Server IdP

SAML

1、SAML协议是什么?

SAML(Security Assertion Markup Language,安全断言标记语言)是一种基于XML的标准,用于在不同安全域之间交换身份验证和授权数据。SAML 主要用于单点登录(SSO)和身份验证,使得用户可以在多个应用和服务之间无缝切换,而无需重复输入凭证。

SAML的核心概念
  • 身份提供者(Identity Provider, IdP):负责验证用户身份并生成SAML断言(Assertion)。
  • 服务提供者(Service Provider, SP):依赖于IdP进行用户身份验证的应用或服务。
  • 用户代理(User Agent):通常是用户的浏览器,用于与IdP和SP进行交互。
  • SAML断言(Assertion):包含用户身份信息的XML文档,由IdP生成并发送给SP。
  • SAML请求(Request):SP 发送给IdP的请求,用于启动身份验证流程。
  • SAML响应(Response):IdP 发送给SP的响应,包含SAML断言。

2、SAML协议具体的认证流程

详细步骤
  1. 用户请求访问资源
  • 用户尝试访问一个受保护的资源,例如某个Web应用中的页面。
  • SP检查用户是否已经通过身份验证。如果用户未认证,则SP会生成一个SAML请求。
  1. SP生成SAML请求
  • SP生成一个SAML请求,包含必要的参数,如SP的实体ID、目标URL等。
  • SP将SAML请求编码为Base64或Deflate格式,以便通过HTTP POST或Redirect方式传输。
  • SP将用户重定向到IdP的登录页面,并附带编码后的SAML请求。
  1. 用户在IdP进行身份验证
  • 用户在IdP的登录页面输入用户名和密码。
  • IdP验证用户提供的凭证。如果凭证有效,IdP会生成一个SAML断言。
  1. IdP生成SAML断言
  • IdP生成一个包含用户身份信息的SAML断言,包括用户标识、身份验证时间等。
  • IdP将SAML断言编码为Base64或Deflate格式,以便通过HTTP POST或Redirect方式传输。
  • IdP将用户重定向回SP,并附带编码后的SAML断言。
  1. SP验证SAML断言
  • SP接收到用户携带的SAML断言。
  • SP验证SAML断言的签名和内容,确保断言的有效性和完整性。
  • 如果SAML断言有效,SP会创建一个会话,表示用户已成功认证。
  1. 用户访问资源
  • SP根据用户身份信息,决定是否允许用户访问受保护的资源。
  • 如果用户被授权,SP允许用户访问请求的资源。
User Service Provider (SP) Identity Provider (IdP) SP IdP 请求访问资源 重定向到IdP (附带SAML请求) 输入凭证 重定向回SP (附带SAML断言) 接收SAML断言 验证SAML断言 创建会话并授权访问资源 User Service Provider (SP) Identity Provider (IdP) SP IdP

JWT

1、JWT协议是什么?

JWT(JSON Web Token)是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息。JWT 以 JSON 对象的形式存在,通常用于身份验证和信息交换。JWT 包含三个部分:头部(Header)、载荷(Payload)和签名(Signature)。

  • JWT 的组成部分
1. 头部(Header)

包含令牌的类型(通常是“JWT”)和所使用的签名算法(如HMAC SHA256或RSA)。
示例:

{
  "alg": "HS256",
  "typ": "JWT"
}
2. 载荷(Payload)
  • 包含声明(claims),即实际要传递的数据。声明可以是预定义的,也可以是自定义的。
  • 预定义声明包括:
  1. iss(issuer):签发者
  2. sub(subject):主题
  3. aud(audience):受众
  4. exp(expiration time):过期时间
  5. nbf(not before):生效时间
  6. iat(issued at):签发时间
  7. jti(JWT ID):唯一标识符
    自定义声明可以根据需求添加任何数据。
    示例:
{
  "sub": "1234567890",
  "name": "John Doe",
  "admin": true
}

3.签名(Signature)

用于验证消息在传输过程中没有被篡改,并且可以确认签发者的身份。
签名通过以下方式生成:

HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)

示例:

HMACSHA256(
  eyJhbGciOiAiSFMyNTYiLCAidHlwIjogIkpXVCJ9 +
  eyJzdWIiOiAiMTIzNDU2Nzg5MCIsICJuYW1lIjogIkpvaG4gRG9lIiwgImFkbWluIjogdHJ1ZX0,
  your-256-bit-secret
)
  • JWT 的特点
  1. 紧凑:JWT 是紧凑的,适合在 URL、POST 参数或 HTTP 头中传输。
  2. 自包含:JWT 包含所有必要信息,减少了数据库查询的需要。
  3. 安全:通过签名确保信息的完整性和真实性。

2、JWT协议的具体认证流程

详细步骤
  1. 用户登录
  • 用户通过表单或其他方式提交用户名和密码。
  • 服务器验证用户提交的凭证。如果凭证有效,服务器生成一个 JWT。
  • 服务器将生成的 JWT 返回给客户端,通常通过 HTTP 响应头(如 Authorization)或响应体。
  1. 客户端存储 JWT
  • 客户端将收到的 JWT 存储在本地存储(如浏览器的 localStorage 或 sessionStorage)或内存中。
  1. 客户端发送 JWT
  • 客户端在后续请求中将 JWT 包含在 HTTP 请求头中,通常使用 Authorization 头。
Authorization: Bearer <token>
  1. 服务器验证 JWT
  • 服务器从请求头中提取 JWT。
  • 服务器验证 JWT 的签名,确保 JWT 没有被篡改。服务器还会检查 JWT 的过期时间和生效时间。
  • 如果 JWT 有效,服务器处理请求并返回响应。
  1. 用户访问资源
  • 用户通过带有有效 JWT 的请求访问受保护的资源。
  • 服务器验证 JWT 后,返回请求的资源。
User Server Resource Server 提交用户名和密码 返回JWT 请求资源 (附带JWT) 验证JWT 返回资源 User Server Resource Server
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值