淘东电商项目(71) -互联网安全架构设计(网关验证AccessToken)

简介: 淘东电商项目(71) -互联网安全架构设计(网关验证AccessToken)

引言

本文代码已提交至Github(版本号:626d01d9557e8989e6faf4522fa276a3bcc823c3),有兴趣的同学可以下载来看看:https://github.com/ylw-github/taodong-shop

在之前博客《淘东电商项目(67) -互联网安全架构设计(方法论)》,主要讲解了互联网安全架构设计的方法,主要介绍了如下几种:

  • 基于网关实现IP黑名单与名单拦截
  • API接口实现Token授权认证
  • 使用MD5实现API接口验证签名,防止抓包篡改数据
  • 实现API接口安全加密传输(公钥和私钥互换机制)
  • 基于Oauth2.0 实现API接口开放平台
  • 接口参数使用网关实现防止XSS、SQL注入
  • 定期工具实现代码健康扫描

上面的打勾代码实现在前面博客已经讲解完,本文继续讲解网关验证上一篇博客OAuth授权验证成功后返回的AccessToken。

本文目录结构:

l____引言

l____ 1.代码实现

l____ 2.测试

1.代码实现

①application.yml配置网关(url 地址后面以public开始的为提供给第三方接口,比如下面的/public/api-pay/**):

### 配置网关反向代理
zuul:
  routes:
    api-a:
      ### 以 /api-weixin/访问转发到会员服务
      path: /api-weixin/**
      serviceId: taodong-shop-service-weixin
    api-b:
      ### 以 /api-member/访问转发到订单服务
      path: /api-member/**
      serviceId: taodong-shop-service-member
    api-c:
      ### 以 /api-member/访问转发到订单服务
      path: /api-pay/**
      serviceId: taodong-shop-service-pay
    api-d:
      ### 以 /api-pay/访问转发到订单服务
      path: /public/api-pay/**
      serviceId: taodong-shop-service-pay

②增加AccessToken验证接口(GatewayBuild类):

/**
* api权限控制
*
*/
Boolean apiAuthority(RequestContext ctx, HttpServletRequest request);

③接口实现(VerificationBuild类):

@Override
public Boolean apiAuthority(RequestContext ctx, HttpServletRequest request) {
    String servletPath = request.getServletPath();
    log.info(">>>>>servletPath:" + servletPath + ",servletPath.substring(0, 5):" + servletPath.substring(0, 5));
    if (!servletPath.substring(0, 7).equals("/public")) {
        return true;
    }
    String accessToken = request.getParameter("accessToken");
    log.info(">>>>>accessToken验证:" + accessToken);
    if (StringUtils.isEmpty(accessToken)) {
        resultError(ctx, "AccessToken cannot be empty");
        return false;
    }
    // 调用接口验证accessToken是否失效
    BaseResponse<JSONObject> appInfo = verificaCodeServiceFeign.getAppInfo(accessToken);
    log.info(">>>>>>data:" + appInfo.toString());
    if (!isSuccess(appInfo)) {
        resultError(ctx, appInfo.getMsg());
        return false;
    }
    return true;
}

④构建者:

@Component
public class GatewayDirector {
    @Resource(name = "verificationBuild")
    private GatewayBuild gatewayBuild;
    public void direcot(RequestContext ctx, String ipAddres, HttpServletResponse response, HttpServletRequest request) {
        /**
         * 黑名单拦截
         */
        Boolean blackBlock = gatewayBuild.blackBlock(ctx, ipAddres, response);
        if (!blackBlock) {
            return;
        }
        /**
         * 参数验证
         */
        Boolean verifyMap = gatewayBuild.toVerifyMap(ctx, ipAddres, request);
        if (!verifyMap) {
            return;
        }
        /**
         * XSS攻击处理
         */
        Map<String, List<String>> filterParameters = gatewayBuild.filterParameters(request, ctx);
        if (filterParameters != null && filterParameters.size() > 0) {
            ctx.setRequestQueryParams(filterParameters);
        }
        // 3.验证accessToken
        Boolean apiAuthority = gatewayBuild.apiAuthority(ctx, request);
        if (!apiAuthority) {
            return;
        }
    }
}

2.测试

1.模拟合作伙伴提交个人信息,申请appIdappSecret,浏览器访问:http://localhost:9500/applyAppInfo?appName=腾讯小马

2.获取AccessToken令牌,浏览器访问:http://localhost:9500/getAccessToken?appId=7f38d645-032a-43e7-9f08-b7740288836d&appSecret=BF81CD9C70B597F88CF7794A7961F7FD

3.通过令牌去提交订单,首先使用错误的令牌访问:

http://localhost/public/api-pay/cratePayToken?payAmount=9999&orderId=20200513141452&userId=27&productName=apple&accessToken=123,可以看到令牌无效。

再使用正确的令牌访问http://localhost/public/api-pay/cratePayToken?payAmount=9999&orderId=20200513141452&userId=27&productName=apple&accessToken=authfdc563ec2ec049ea8fc66ab777215bb5,可以看到访问成功:

本文完!

目录
相关文章
|
4月前
|
缓存 监控 API
探索微服务架构中的API网关模式
【10月更文挑战第5天】随着微服务架构的兴起,企业纷纷采用这一模式构建复杂应用。在这种架构下,应用被拆分成若干小型、独立的服务,每个服务围绕特定业务功能构建并通过HTTP协议协作。随着服务数量增加,统一管理这些服务间的交互变得至关重要。API网关作为微服务架构的关键组件,承担起路由请求、聚合数据、处理认证与授权等功能。本文通过一个在线零售平台的具体案例,探讨API网关的优势及其实现细节,展示其在简化客户端集成、提升安全性和性能方面的关键作用。
93 2
|
4月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
【10月更文挑战第1天】探索微服务架构中的API网关模式
106 2
|
2月前
|
设计模式 负载均衡 监控
探索微服务架构下的API网关设计
在微服务的大潮中,API网关如同一座桥梁,连接着服务的提供者与消费者。本文将深入探讨API网关的核心功能、设计原则及实现策略,旨在为读者揭示如何构建一个高效、可靠的API网关。通过分析API网关在微服务架构中的作用和挑战,我们将了解到,一个优秀的API网关不仅要处理服务路由、负载均衡、认证授权等基础问题,还需考虑如何提升系统的可扩展性、安全性和可维护性。文章最后将提供实用的代码示例,帮助读者更好地理解和应用API网关的设计概念。
92 8
|
3月前
|
缓存 负载均衡 JavaScript
探索微服务架构下的API网关模式
【10月更文挑战第37天】在微服务架构的海洋中,API网关犹如一座灯塔,指引着服务的航向。它不仅是客户端请求的集散地,更是后端微服务的守门人。本文将深入探讨API网关的设计哲学、核心功能以及它在微服务生态中扮演的角色,同时通过实际代码示例,揭示如何实现一个高效、可靠的API网关。
|
3月前
|
监控 安全 应用服务中间件
微服务架构下的API网关设计策略与实践####
本文深入探讨了在微服务架构下,API网关作为系统统一入口点的设计策略、实现细节及其在实际应用中的最佳实践。不同于传统的摘要概述,本部分将直接以一段精简的代码示例作为引子,展示一个基于NGINX的简单API网关配置片段,随后引出文章的核心内容,旨在通过具体实例激发读者兴趣,快速理解API网关在微服务架构中的关键作用及实现方式。 ```nginx server { listen 80; server_name api.example.com; location / { proxy_pass http://backend_service:5000;
|
3月前
|
Web App开发 Dubbo 关系型数据库
Soul网关接入与验证
Soul网关接入与验证
63 0
Soul网关接入与验证
|
3月前
|
缓存 监控 API
探索微服务架构中的API网关模式
随着微服务架构的兴起,API网关成为管理和服务间交互的关键组件。本文通过在线零售公司的案例,探讨了API网关在路由管理、认证授权、限流缓存、日志监控和协议转换等方面的优势,并详细介绍了使用Kong实现API网关的具体步骤。
60 3
|
3月前
|
存储 缓存 监控
探索微服务架构中的API网关模式
探索微服务架构中的API网关模式
58 2
|
3月前
|
监控 安全 Cloud Native
云原生安全:Istio在微服务架构中的安全策略与实践
【10月更文挑战第26天】随着云计算的发展,云原生架构成为企业数字化转型的关键。微服务作为其核心组件,虽具备灵活性和可扩展性,但也带来安全挑战。Istio作为开源服务网格,通过双向TLS加密、细粒度访问控制和强大的审计监控功能,有效保障微服务间的通信安全,成为云原生安全的重要工具。
68 2
|
4月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
83 8