实录分享 | 微服务访问安全设计方案全探索

物联网

  第四种,如上示意图所示,使用SAML协议来对用户请求进行操作鉴权。它是一个基于XML的标准,用于在不同的安全域(security domain)之间交换认证和授权数据。在SAML标准定义了身份提供者(identity provider)和服务提供者(service provider),这两者构成了前面所说的不同的安全域。

  以上图Google提供的Apps SSO的机制,简单介绍下SAML鉴权的交互方式:

  用户请求访问自建的google application

  当前application 生成一个 SAML 身份验证请求。SAML 请求将进行编码并嵌入到SSO 服务的网址中。

  当前application将重定向发送到用户的浏览器。重定向网址包含应向SSO 服务提交的编码 SAML 身份验证请求。

  SSO(统一认证中心或叫Identity Provider)解码 SAML 请求,并提取当前application的 ACS(声明客户服务)网址以及用户的目标网址(RelayState 参数)。然后,统一认证中心对用户进行身份验证。

  统一认证中心生成一个 SAML 响应,其中包含经过验证的用户的用户名。按照 SAML 2.0 规范,此响应将使用统一认证中心的 DSA/RSA 公钥和私钥进行数字签名。

  统一认证中心对 SAML 响应和 RelayState 参数进行编码,并将该信息返回到用户的浏览器。统一认证中心提供了一种机制,以便浏览器可以将该信息转发到当前application ACS。

  当前application使用统一认证中心的公钥验证 SAML 响应。如果成功验证该响应,ACS 则会将用户重定向到目标网址。

  用户将重定向到目标网址并登录到当前application。

  目前SAML在业界也有相当的使用度,包括IBM Weblogic等产品。

  第四种方案的特点有:

  由Identity Provider提供可信的签名声明

  服务的访问安全由可信的Identity Provider提供

  小结下使用第四种方案的好处:标准的可信访问模型

  同时,小结下使用这种方案需要注意的地方:

  基于XML协议,传输相对复杂

  对非浏览器客户端适配不方便

  四、Spring Cloud Security解决方案

  Spring Cloud Security特点有:

  基于OAuth2 和OpenID协议的可配置的SSO登录机制

  基于tokens保障资源访问安全

  引入UAA鉴权服务,UAA是一个Web服务,用于管理账户、Oauth2客户端和用户用于鉴权的问题令牌(Issue Token)。UAA实现了Oauth2授权框架和基于JWT(JSON web tokens)的问题令牌。

物联网

  下面简单介绍下UAA,事实上,它是由CloudFoundry发起的,也是CloudFoundry平台的身份管理服务( https://docs.cloudfoundry.org/ ... .html )。

  主要功能是基于OAuth2,当用户访问客户端应用时,生成并发放token给目标客户端。

  UAA认证服务包含如下几个方面的内容:

  认证对象。如用户、客户端以及目标资源服务器

  认证类型。主要有授权码模式、密码模式以及客户端模式

  认证范围,即认证权限,并作为一个命名的参数附加到AccessToken上。

  接下来,结合实例,一起来看下UAA在Spring Cloud中的实践。

物联网

  如图所示,这是一个简单的基于Spring Cloud微服务架构的例子,它的主要组件有:

  Eureka组件提供服务发现功能

  独立的Config组件提供类似配置中心的服务,持久化层可以是文件系统,也可是git repository

  Auth组件提供基于UAA的鉴权服务

  Account组件保存用户的业务信息

  其他组件不一一介绍了

  这里主要讲Auth组件和Account组件是如何基于UAA服务进行认证和授权。

物联网

  图一为Auth组件业务代码中定义了不同客户端的认证类型和认证范围,其中:

  浏览器端的认证类型是password,认证范围是ui

  account组件端的认证类型是client_credentials,认证范围是server

  图二为config组件(配置中心)定义的请求路由的规则,其中: