API 经济的实现通过阅读上一小节,我们了解了 API 经济的概念。那么,对于企业客户 (非 IT、互联网公司),API 经济如何实现呢?
从技术角度而言,需要对企业的 API 的有效管理,并对外暴露,供其他企业或者用户使用,从技术上应考虑以下几点(包括但不限于):
- API 灵活的访问控制
- API 的身份认证与授权
- API 合同和费率限制
- API 访问分析和报告
- API 的计费
接下来,我们从以上五个方面,看一下 API 经济如何落地。
API 的访问控制对于企业而言,API 大致分为两类:
- 对内的 API:通常会将应用的 API 接口暴露给互联网,因此其访问控制和安全显得尤为重要。
- 对外的 API:通常不会直接产生经济效益,虽然在内部,但也需要访问控制。
传统上,API 的访问控制通常是通过在应用的源码中实现的。例如在 JavaEE 中,我们可以通过在源码中使用注释的方法,对特定的 URI 进行保护:
- @RolesAllowed:定义可以访问该方法的角色。
- @PermitAll:定义的所有角色都可以访问该方法。
- @DenyAll:拒绝访问该方法的所有角色。
这种问控制的实现,主要由应用开发人员来实现。对于内对的 API 而言,这种是没有问题的。
但是,如果 API 是对外的、产生经济效益的,那么开发人员在编写代码的时候,很难将后续 API 的所有被调用的场景考虑全;而如果根据后续出现的情况进行调整的话,则需要修改源码、进行编译。这显然不符合 API 经济的实际情况。
所以,针对 API 经济,我们需要将 API 中方法的权限控制,从源码中抽取出来,放到 API 管理方案中。通过 UI 的方式,可以对一个应用的 API(URI)进行灵活地访问控制。
API 的身份认证与授权API 的身份认证与授权本质上是为了保证 API 的安全。
在 API 经济的时代,API 的身份认证与授权,必须要兼顾安全性、可用性、可扩展性:
- 针对于 API 的身份认证,可以使用 OpenID。
- 针对于 API 授权,可以 OAuth2.0。
OpenID 是一种开放的身份验证标准。用户通过 OpenID 身份提供商获取 OpenID 帐户。然后,用户将使用该帐户登录任何接受 OpenID 身份验证的网站。
OpenID 建立在 OAuth 2.0 协议之上,允许客户端验证最终用户的身份并获取基本配置文件信息 RESTful HTTP API,使用 JSON 作为数据格式。
开放授权(OAuth)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源,而无需将用户名和密码提供给第三方应用。OAuth 2.0 是 OAuth 协议的下一版本,相比于 OAuth1.0,更关注客户端开发者的简易性;它为移动应用(手机、平板电脑、Web 等)提供了专门的认证流程。
OAuth 2.0+ OpenID 的方式,在互联网已经被大量使用。
举一个我们身边的例子:我们登录很多手机 app 或者网站,都可以通过微信认证,例如今日头条。
在这个认证和授权的过程中,微信就是 OpenID 身份提供方,而今日头条,就是 OpenID 身份依赖方。
下面用通过微信登录今日头条的例子来演示 API 的身份认证与授权过程。
1. 打开浏览器,登录今日头条网站,如图 2 所示。点击通过微信授权登录。这时候,相当于客户端向今日头条的服务器发起授权请求。
图 2. 今日头条网站登录页
2. 今日头条响应一个重定向地址给客户端,这个地址指向微信授权登录。
3. 浏览器接到重定向地址,再次发起访问,这次是向微信授权服务器发起请求,屏幕出现二维码,如图 3 所示:
图 3. 认证二维码在这个过程中,微信认证服务器也对用户进行了身份认证,只是因为用户在扫描的时候,微信已经在手机登录了(用户在微信认证服务器上,首先验证了自己的身份,然后用微信同意今日头条客户端发起的授权请求,也就是拿起手机用微信扫描二维码)。
4. 此时拿手机微信扫描电脑屏幕的二维码,并且在手机微信上点击同意授权登录,如图 4 所示:
图 4. 确认登录今日头条5. 接下来,微信授权服务器会返回给浏览器一个 code。 浏览器通过获取到的 code,向认证服务器发起申请有效令牌 (token)的请求。认证服务器返回 token。
6. 浏览器拿到 token,向认证服务器获取用户信息。认证服务器返回用户信息。
用户信息在浏览器展示出来。截至到目前,登录过程完毕。
7. 客户端通过 token 向资源服务器申请资源(例如今日头条只开放给会员看的一些文章或者视频)。
8. 今日头条的服务器,确认 token 无误,同意向客户端开放资源。
图 5. 今日头条登陆成功 |