最近为国内银行客户设计新系统与现有系统的集成。关键之一在于登录认证。在了解现有系统的非标接口过程中不出意外地遇到了些困难。


类比个例子,现有系统是个插线板,要求新系统插头标准如下:

三平头,头长18mm宽9mm厚2mm, 三头中心点距圆心10mm, 上头平行圆心到头心线,下二头垂直圆心到头心线。


wKioL1jIr7jzetRyAAA1OYxQmsU133.jpg


上述接口是美标,欧标,英标,或者中国标准?


wKioL1jIr-WxroT9AABr-whDzj4453.jpg


“什么?都不是?嗯……”


如此的例子在企业级应用的登录认证集成过程中总是会遇到的。IT发达的国家整体情况好很多,因为大多数实现都采用了业界通行的标准。从而系统的扩展和集成往往会少一些阻碍。采用通用标准协议和成熟技术实现就如同上述的插头一样,安全性、通用性、可扩展性、可维护性,诸多好处是毋庸置疑的。自造IDM以及相关协议就是重新发明轮子。


那么什么是IDM? 本文将介绍相关的一些概念和协议,并帮助读者理解它的复杂性。


什么是IDM

IDM (Identity Management) ,也有称IAM (Identity & Access Management),意为身份认证管理。狭义地讲管理登录的系统是IDM系统。概括地讲,在计算机安全领域,IDM是指安全和业务规范管理,以确保正确的人,在正确的时间,以正确的理由,访问正确的资源。


随着SaaS服务的兴起,以往大而复杂的应用系统逐渐被分散的功能简单的多个小应用所取代。基于移动设备的应用普及又使得新的特定用途应用数量迅速增长,从而加速了这一趋势。在应用系统数量增加的环境下,系统间的集成,安全,单点登录,访问控制等需求变得更为明显,虽然其实这些需求从来都存在。


IDM系统涵盖的管理内容比较多。本文着重登录与认证相关的部分。这也是系统登录集成对接的重要部分。在介绍诸多繁复的技术概念之前,我先以一个非技术的场景帮助读者理解将要介绍的概念。


飞机场的流程

在去机场坐国际航班的过程中,大概是这样的:先去拿护照签到(check-in)打印登机牌,出关,安检,候机,验证登机牌并登机。这是一个多系统参与的认证过程。


wKiom1jI1q7xHBB7AAAa8ECENkg227.jpg


系统角色

(不同的协议规范里对系统的名称各不相同。这里我们先采用SAML协议里的名称)

ID提供者(IDP, Identity Provider,或issuer):负责提供ID服务。上述机场例子中,护照的识别和认证系统是IDP。

服务提供者(SP,Service Provider,target):负责提供最终服务。上述例子中,飞机是SP。用户最终要坐飞机。


登录协议,认证协议,和令牌

登录协议(Sign-in protocol):在机场做这些事情的顺序。不按这个顺序完成这些步骤将无法登机。

认证协议(authentication protocol):使用护照(而不是身份证或其他)验证身份的方式。

令牌(Token):登机牌。



系统间的交互——协议和令牌

各系统和用户客户端之间的协同工作靠的是协议,传输的是令牌。下面介绍几种主流框架协议:


SAML

SAML (Security Assertion Markup Language)是个简称。准确地说应该是SAML协议(SAML Protocol),或SAML令牌(SAML Token)。

在SAML协议里,系统被描绘成这样:


wKiom1jJG2iSL_r9AAC60BM8cOc412.png

使用的什么登录协议?SAML Protocol。

使用的什么认证协议?具体的认证协议并没有在此表述。例如,基于浏览器的一般人证方式可以是Form(用户名密码)认证。

令牌类型是什么?SAML Token。


安全以及信任是如何保证的?在系统建立之初,需要在SP和IDP间建立互信。例如,通过手动配置的方式在IDP和SP间交换包含证书的metadata。

SAML亦支持Federation。例如,IDP将请求转发并代理给信任的另一个IDP。在这种时候,我们称在此链中的系统为Federation Provider (FP)。


WS-Federation


说起WS-Federation(或WS-Fed)往往要提及WS-*,WS-Security,和WS-Trust。WS-Federation是WS-*家族一员。WS-*最初是为基于SOAP的Web Service设计的规范集。WS-Security是一个安全规范,是SOAP的扩展。WS-Trust是WS-Security的扩展规范。WS-Trust描述了系统间交互(登录协议)。WS-Federation描述了在多个安全域之间代理和传递ID,属性,和认证的规范。


在WS-Trust看来世界是这样的:

wKioL1jJHr-inyWwAALz2dQLW0k396.png


在WS-Trust里引入了STS(Security Token Service,安全令牌服务)的概念。类似于SAMLp体系里IDP。


使用的什么登录协议?WS-Federation/WS-Trust。

使用的什么认证协议?具体认证协议在此有三个例子:username/password,X509 certificate,Kerberos。

令牌类型是什么?在此没有描述。令牌类型依实现而定。例如,在WS-Federation里可以使用SAML Token作为令牌。


OAuth

对比SAML包含配置和属性绑定,用于实现全套单点登录(SSO)、ID联合(Federation),OAuth只描述授权框架,而不是一个认证协议。


OAuth的典型场景是,用户打开网页或应用,跳转至其他应用(例如Facebook,微信),询问是否允许获得使用个人的某些(信息)。


OAuth的工作流是这样的:

wKiom1jJIXrAqx0xAAEVs3jpSws428.png

OAuth请求的URL样例如下:

https://nanw.vmwareidentity.asia/oauth2/authorize?response_type=code&client_id=3ab2a37f-4cfd-409c-937c-defd776f4dee&redirect_uri=https://robotypo.appspot.com&resource=robotypo.appspot.com



认证

前文介绍了一些登录协议,这里简单列举一些认证协议:

  • 基于密码的认证方式 - 也许是最古老但是用最多的认证方式

  • RADIUS

  • Kerberos - 最常见的对Kerberos协议的实现是微软的Active Directory。这篇博文用通俗的方式讲解了什么是Kerberos:http://vmwareeuc.blog.51cto.com/8606576/1870674

  • NTLM


IDM成熟产品

有如此多的成熟协议和技术,虽然是公开并通用的,可是单点登录(SSO)、跨域聚合(Cross security realms federation)、访问控制和系统扩展性等集成问题依然是一件复杂的事情(设计代价大于实施)。幸好业界也有很多成熟的产品可以帮助解决这一困境。VMware vIDM,Okta,Microsoft ADFS,Shibboleth, CAS,Ping Identity, OpenAM, Keycloak,等等等等。

wKioL1jJK7DQ4aiNAAI4-DIbqM8089.png-wh_50


作者简介:王南,China EUC Solution Staff Engineer