• 简介
    • 一般流程
    • 案例
      • Web 应用(API 消费者)
      • API Gateway (api 网关)
      • LoopBack 应用
      • 执行 demo

    一个典型的API 网关部署如下面的流程图,以下组件参与:

    • API Gateway(API 网关)
      • OAuth 2.0 authorization server(OAuth 授权服务器)
      • Loopback 的API 网关策略
    • Client application(客户端应用)
      • Backend - web server(后端 - Web服务器)
      • Backend - API server(后端 - API 服务器)
      • Frontend - Web/mobile client (前端 - web 客户端/mobile)

    客户端应用的API调用到被保护,并且通过API网关代理API服务器.具体步骤如下:

    1. 客户端应用呈现从 web 服务端提供的用户服务界面.
    2. 客户端应用从 OAuth 2.0授权服务器 请求获得到 一个授权码 / 访问令牌
    3. OAuth 2.0授权服务器将浏览器重定向到回调端点并接收访问令牌或授权码.对于授权码,web 服务器将调用 OAuth 服务器的调用接口 换取访问令牌
    4. 客户端应用通过 API 带着 访问令牌调用API网关. OAuth 2.0 资源服务器验证 访问令牌 或者拒绝无效.
    5. 请求到策略列表
    6. 代理组件调度API请求到客户端应用程序的API服务器
    1. 检出 strong-gateway-demo
    2. 更新 datasources.json
    3. 编辑 model-config.json 更改数据源
    4. 修改 然后执行

    展示了一个API消费者之间的相互作用 API网关 以及API服务器, 该示例包含三个不同的应用程序:

    下图说明了该架构:

    demo

    Web application (API consumer API 消费者)

    • Implicit flow 隐式流程(又名作为客户端流程)
    • Authorization code flow(授权码流程)
    • Client credentials flow(客户端凭证流程)
    • Resource password owner credentials flow(资源密码所有者凭证流程)

    API Gateway (API 网关)

    该案例包含一个 StrongLoop API 网关实例

    Loopback 应用

    该案例是一个带有 REST API 的 Loopback 引用,它有一个 Model 并且有个属性: content

    执行demo

    随着其他步骤然后运行demo:

    1. 在项目的根目录并输入以下命令来启动, 用来启动服务, 监听端口从 3000 - 3005
    2. 访问 http://localhost:3000 浏览器将被重定向到 , 你将看到一些链接
    3. 通过选择启动 隐式流程(又名作为客户端流程), 你会看到一个弹出,询问您是否要被重定向到指定的URL(注意请求字段是否匹配 于API 网关), 选择确定.
    4. 在这一点,的浏览器将被重定向到网关的认证页面(注意 url 现在https://localhost:3005 ,而不是), 登录使用提供的凭据: 单击 提交
    5. 一旦登出成功,注意网址更改为 https://localhost:3005/oauth/authorize?client_id... ,这个网关服务将会是否发放权限到 demo-app ,点击允许批准授予。你将会被重定向到
    6. 重定向后, 注意url 变为 https://localhost:3001/implicit-flow.html#access_token=..., 这里要注意的关键是 嵌入URL的 access token 访问令牌 , 这是用来由API网关保护接入资源, 你也应该看到在页面上嵌入在各自的URL访问令牌两个环节。
    7. 第一个链接, 访问的OAuth 2.0保护的资源是由托管API网关保护本地服务器上的资源的链接, 点击链接,你会看到该URL将您重定向到 本案的情况是API网关代理您的申请回托管在本地服务器上的资源, 详情查看 <>
    8. 点击浏览器的后退按钮返回页面列出的资源,点击第二个链接 调用
    9. 你将看到 notes 结果
    10. 在这种情况下, demo-api-server 提供资源于 localhost:3002 , 我们对API网关请求被代理到 演示API服务器 并把结果发回的JSON(注意URL是 ,而不是 https://localhost:3002/api/notes) ??