接入OAuth2

OAuth3.0知识总结

  1. OAuth 2.0是一种授权协议,核心是获取和使用访问令牌。

  2. 授权码许可流程需要引入授权码,既保证安全又实现用户体验。

  3. OAuth 2.0也可视为一种委托协议,用户委托第三方软件代表操作。

  4. 授权码许可流程是OAuth 2.0中最完备、安全的授权方式。

  5. 使用不当会引发安全问题,需要遵守各项规范细节。

  6. 需要使用HTTPS保证通信安全。

  7. JWT不是OAuth 2.0的组成部分,是对其的扩展。

  8. OAuth 2.0提供框架,OIDC在其上实现身份认证。

  9. 第三方软件和平台方都需提高安全意识,保障OAuth 2.0安全。

  10. OAuth 2.0是解决授权和身份认证问题的有效工具。

移动APP接入OAuth3

移动App使用OAuth 2.0的要点总结如下:

  1. 移动App可分为无服务端和有服务端两类,后者使用OAuth 2.0更安全。

  2. 无服务端App可以用PKCE协议防止授权码泄露,但不建议 敏感信息如app_secret。

  3. 有服务端App可以通过服务端获取访问令牌,与Web应用流程类似,安全性高。

  4. 微信等平台都建议移动App使用后台服务获取访问令牌。

  5. 使用微信登录等第三方登录时,App获取授权码,服务端使用code和app_secret获取访问令牌。

  6. 不建议在App端保存敏感信息,使用服务端可以避免安全问题。

  7. PKCE协议可在一定程度上保障无服务端App的安全性。

  8. 建议移动App尽可能使用服务端和后台通信获取访问令牌。

  9. OAuth 2.0核心思想可应用到App中,通过安全使用保障数据安全。

安全风险和防范措施

OAuth 2.0的安全风险及防范措施可以概括以下几点:

  1. CSRF攻击可以通过状态参数state进行防范。

  2. XSS攻击需要对响应内容进行转义处理防止注入恶意代码。

  3. 水平越权需要校验数据归属关系,避免不同用户的数据混淆。

  4. 授权码失窃需要校验app_id并立即作废使用过的授权码。

  5. 重定向URI篡改需要对URI做完整性校验。

  6. 需要遵守OAuth 2.0各项规范细节以保障安全。

  7. 开发人员安全意识不够是导致这些漏洞的常见原因。

  8. 从攻击方考虑也有助于发现更多风险因素。

  9. OAuth 2.0也面临互联网中的通用安全风险。

  10. 安全防范需要全面考虑各种可能的攻击场景。

利用OAuth3 实现OIDC

使用OAuth 2.0实现OIDC可以概括以下要点:

  1. OIDC是一种开放的用户身份认证标准协议,是在OAuth 2.0的基础上构建的。

  2. OIDC新增了ID令牌,用于传递用户标识信息,第三方软件可以用它记录用户登录状态。

  3. OIDC还新增了UserInfo端点,用于第三方软件获取更多用户信息。

  4. ID令牌是一个JWT格式的令牌,包含iss、sub、aud、exp等必要声明信息。

  5. 第三方软件只需解析ID令牌的payload部分,获取用户标识等信息。

  6. 单点登录就是OIDC协议的一种应用场景。

  7. OAuth 2.0提供基础的授权框架,OIDC在其上实现身份认证。

  8. 实现OIDC需要注意ID令牌的安全性、UserInfo信息获取等。

  9. OIDC提供了一个标准的身份认证解决方案。

Spring Security 实现OAuth 2.0

使用 Spring Security 实现 OAuth 2.0 的要点:

  1. 授权服务器使用 JdbcAuthorizationCodeServices 存储授权码,JwtTokenStore 存储 JWT 令牌。

  2. 资源服务器通过本地公钥验证 JWT 令牌,并校验权限。

  3. 支持资源拥有者凭据许可、客户端凭据许可、授权码许可三种模式。

  4. 可以增加 TokenEnhancer 向 JWT 令牌中添加额外信息。

  5. 通过授权码许可实现单点登录,OAuth2RestTemplate 调用资源服务器。

  6. 客户端需要配置客户端信息、令牌端点、授权端点、重定向URI等。

  7. 安全配置需要开放登录页、授权页的访问权限。

  8. 注意使用 HTTPS 传输令牌,避免 CSRF 攻击等安全风险。

  9. Spring Security OAuth 2.0 使用简单,但需要理解工作流程。

基于OAuth3的微服务架构

使用OAuth 2.0/JWT的微服务参考架构要点:

  1. 微服务可以分为5层:流量入口层、Web应用层、网关层、BFF层和领域服务层。

  2. 网关层承担关键的安全功能:校验和转换OAuth访问令牌,以及基于Scope鉴权。

  3. 典型的应用场景包括:第一方Web应用、第一方移动应用、第三方Web应用。

  4. IDP服务负责OAuth协议处理、令牌管理、用户认证。

  5. 前端通过OAuth访问令牌认证,后端通过包含用户信息的JWT令牌认证。

  6. 网关在两种令牌之间转换,实现混合使用。

  7. 与传统Web应用不同,微服务强调服务自治、弹性伸缩、无状态。

  8. 微服务安全力求零认证、细粒度鉴权、无状态会话。

  9. 理解微服务安全机制有助于部署运维OAuth 2.0。

开放平台如何使用Oauth3

  • 开放平台体系的整体结构:

    • 第三方软件:第三方开发者或者 ISV 通过对接开放平台来实现的应用软件。
    • 开放平台:包含 API 网关服务、OAuth 2.0 授权服务和第三方软件开发者中心服务。
    • 受保护资源服务:开放平台提供的 API 服务,需要经过 OAuth 2.0 授权才能被访问。
  • 各大开放平台的授权流程:

    • 推荐使用授权码许可流程。
    • 微信、支付宝、美团等开放平台的授权流程图中都有授权码 code 相关的文字。
  • 授权码流程中的参数说明:

    • 重定向过程用到的参数:response_type、client_id、redirect_uri。
    • 授权端点响应小兔软件用到的参数:code、state。
    • 申请访问令牌需要传递的基本参数:grant_type、client_id、client_secret、code。
    • 令牌端点响应小兔软件涉及的参数:access_token、token_type、expires_in、refresh_token、scope。

猜你喜欢

转载自blog.csdn.net/xielinrui123/article/details/132797606