基于OIDC的STS(安全令牌服务)

九州云腾 | IDaaS统一身份认证云服务 2019/09/27 18:11

用一篇文章说清楚STS(安全令牌服务)到底是什么?

生活中我们常常有用身份证换酒店房卡的场景, 在信息世界中也同样有很多类似的应用场景, 比如使用一种身份去访问需要另外一类身份保护的服务。 STS是(Security Token Service)的缩写,即安全令牌服务,是基于WS-Trust、OAuth和OIDC等研发的身份安全解决方案,用来实现API的认证和授权。因为OIDC的id_token 在其中扮演了重要的角色,在解读STS之前,先做一下安全术语OIDC、OAuth2和OpenID的普及。

OIDC是什么?OIDC可以解决什么问题?
OIDC是OpenID 基金会2014年初发布的开放标准,定义了一种基于OAuth2的可互操作的方式来来提供用户身份认证。是基于OAuth2和OpenID整合的新的认证授权协议。

OAuth2是一个授权(authorization)的开放协议, 虽然已在全世界得到广泛应用,但仅解决了授权问题, 在解决认证问题时往往需要添加额外的API来实现认证。另外, OpenID只是一个认证(Authentication )的协议, 二者在实际应用过程中都有其自身的局限性。

OIDC是二者的综合,恰到好处的融合了OAuth2和OpenID的各自功能。 它在OAuth2的access_token的基础上增加了OpenID身份认证信息,通过公钥私钥配合校验获取身份等其他信息—即id_token。OIDC将是替换(或升级)OAuth2和 OpenID的不二选择。

场景举例:当用户去银行办理业务的时候,客服在要求客户出示身份证的同时核实持证人是不是本人。用户的身份证相当于OAuth2的access_token而用户本人则相当于OpenID身份认证信息,两者同时通过认证,才能办理相应的银行业务。传统的访问令牌(access_token)一般只「认牌不认人」,区别于传统令牌,OIDC分发的身份令牌「即认牌又认人」,可以满足上述场景需求。所以说当大家身份证丢失的时,无需担心银行相关信息被不法分子利用,造成损失。

STS是什么?

STS是(Security Token Service)的缩写,即安全令牌服务,是九州云腾以OIDC为基础研发的在IPG(Identity Provider Gateway)系列产品中提供的身份安全解决方案,主要用来实现API的认证和授权。新知图谱, 基于OIDC的STS(安全令牌服务)

STS的实现原理?

STS服务要求开发的应用端和服务器端做出相应的改变。应用端(Web, Mobile)不再直接向服务器端发送认证请求或索取资源,而是先将账号验证请求发送至IPG的认证服务器(AS, Authentication Server),IPG在服务器验证成功后,会返回一个id_token作为身份令牌,再向业务应用服务器发出请求的时候,需要携带这个令牌以验证身份,并且身份令牌具有一定的时效性。

1、获取id_token

新知图谱, 基于OIDC的STS(安全令牌服务)

2、使用id_token

新知图谱, 基于OIDC的STS(安全令牌服务)

3、刷新id_token

新知图谱, 基于OIDC的STS(安全令牌服务)

STS常见应用场景?

1、一些公司的系统在API接口层面,是应用到应用的调用, 没有人的干预,多数都是HTTP协议,通过抓包工具获取的用户关键信息,存在极大的重放攻击安全风险。携带STS服务分发的身份令牌可以避免这些问题,向服务器发出请求的时候,携带令牌用来验证身份,只有验证通过是身份,才具有访问权限

2、单点登录(SSO)的场景也可以应用到STS服务业务系统可以校验身份令牌的有效性来登录业务系统替代传统的密码或固定设备ID等容易被捕获重放的认证方式

STS如何解决API访问安全问题?

STS解决的问题是让服务器「知道并验证我是谁」。

客户端(或浏览器)和服务器之间一般通过HTTP协议进行通信,而HTTP本身是无状态的,服务器并不能识别每个请求的来源。基于此,在每个请求里附上身份令牌用以识别请求来源,替代长期不变的密码或固定设备ID等容易被捕获重放的认证方式。

通过IPG认证平台的认证方式(账户密码、短信验证码)会获取一个身份令牌(id_token),用以保护第三方移动及API应用的数据资源,保障认证与授权的安全。

综上所述,通用的解决一般流程是:登录一次,服务器生成一个id_token并返回给用户,用户只需每次请求时附带这个id_token,就能标识自己的身份以及确认可访问的数据资源范围。换句话说,id_token就是一个电子版的身份令牌。

如果技术上有能力可以自己开发一个基于OIDC协议的认证服务器(AS, Authentication Server),具体开发流程可以参https://openid.net/connect/。如果开发上存在难度,则可以集成九州云腾的STS服务,同时可以减少研发人员、研发成本和研发时间的投入。

STS集成流程如下:

1.申请STS应用

在开发之前先申请一个STS应用,对应我们要开发的STS功能。

在开发者的后台管理系统中,选择左侧的列表中选择API令牌(STS),选择添加API令牌(STS)。

如下图:

新知图谱, 基于OIDC的STS(安全令牌服务)

填写STS应用信息。如下图(填写内容的解说在图片下方):

新知图谱, 基于OIDC的STS(安全令牌服务)

添加应用完成后,在操作中选择启用,确定后即可集成使用STS服务。如下图:


2.调用API接口

获取id_token

应用端使用,用于从IPG认证服务器获取 OIDC 的 id_token。

刷新id_token

应用端使用,用于从IPG通过refresh_token获取id_token

获取Public Key

应用服务器端使用,用于从IPG通过keyId获取OIDC Public Key公钥。

3.校验id_token

开发者通过九州云腾提供的解密库/方法对id_token进行解析,并验证身份。总之, STS就是用一种身份凭证去换取另外一个访问业务应用所需要令牌的过程。

更多详细请访问:https://www.idsmanager.com/

 

 

新知精选