2) 中国北京 100045 中国地震台网中心
2) China Earthquake Networks Center, Beijing 100045, China
随着地震学研究的持续推进,数据资源共享与数据交换的重要性越来越显著。国际数字地震台网联盟(International Federation of Digital Seismograph Networks,FDSN)制定了一套统一的Web服务接口标准(International Federation of Digital Seismograph Networks,2019),促进了地震波形数据的获取与共享,用户通过Obspy(Krischer et al,2015)等开源python工具,可以从任何基于FDSN标准的Web服务接口的数据中心获取地震数据信息。尽管数据共享为地震学研究带来了便利,但也随之产生了数据安全方面的新难题。特别是在当前网络环境下,未经授权认证的访问增加了安全风险,如何确保数据的安全性并实现合法访问控制,成为一个急需解决的问题。
本文从FDSN服务鉴权角度出发,采用HTTP摘要认证鉴权模式,优化FDSN相关源码,设计实现鉴权模块并进行验证,实现了授权用户方可访问地震波形数据的目标。
1 FDSN服务鉴权的必要性FDSN作为一个全球性的地震数据共享系统,通过提供地震数据服务的全球网络协议,为地震数据服务的标准化交换奠定了坚实基础。这一协议的实现,使得全球各地的研究机构和地震数据中心能够便捷地共享和传输地震数据,推动了地震学研究和数据共享应用的发展。
而在FDSN系统中,Web服务扮演了关键角色,其提供了多样化接入方式以满足不同用户需求。特别是基于webservice的接口,因其标准化和广泛的应用特性而被普遍采用。借助这一接口,用户能够轻松实现对地震数据的查询、检索,并能便捷获取全球各地的历史或实时地震数据,为科研人员的数据获取工作带来便利,推动了地震科学数据共享工作的不断进步。
2015年,中国地震台网中心通过“地震科学数据共享”项目搭建了地震数据服务云平台,实现了部分地震数据的FDSN标准Web服务接口。为地震数据的共享与应用提供了新方式,使得数据获取更为便捷,研究与应用更为高效(韩雪君等,2023)。
随着信息化技术的不断发展,作为地震科学研究的核心信息,地震波形数据具备较高的科研价值。然而,在地震波形数据需求持续增长的背景下,数据和网络安全正面临着严峻挑战,网络攻击与数据泄露事件频发。因此,严格实施数据的安全访问控制,才能为地震科学数据的共享和使用提供一个更加安全、可靠的环境,才能更好地促进地震科学数据共享业务的开展和地震科学技术的研究(谢有顺等,2017)。
为了确保地震波形数据的安全性,防止未经授权的接入和非法访问,对FDSN web服务引入一种鉴权机制,通过验证用户的身份和权限,确保只有经过授权的用户才能访问特定的地震波形数据。
2 FDSN服务鉴权的设计FDSN服务鉴权的设计思路是,通过分析FDSN源代码,引入HTTP摘要认证机制,修改优化FDSN源代码,嵌入用户身份验证模块,实现数据获取前的用户鉴权。即当客户端请求FDSN服务时,服务器发出质询,要求客户端提供包含用户名、密码和其他质询参数的加密摘要;服务器随后验证该摘要,只有验证通过用户才能访问受保护的服务数据。具体设计思路及步骤如下:
首先,通过FDSN服务(portable-fdsnws-dataselect)的源码分析,其主要包括server、request和handler三个核心模块。其中server模块作为启动FDSN web服务的入口,负责服务的配置与启动,确保服务端能够正常接收处理来自各类客户端的请求;request则负责从HTTP请求中提取必要参数,为handler提供处理请求所需数据;handler则是处理访问请求的具体执行模块,鉴权认证逻辑主要在该模块中实现。
在实现鉴权时,FDSN在接收到需要认证的访问请求时,默认采用HTTP基本认证方式。然而,当使用目前发展较为成熟且应用广泛的ObsPy(李晓姝等,2022)进行数据请求,并在请求参数中包含user和password时,默认期望使用的是HTTP摘要认证。因此,为了提高接入授权的安全性并适配不同接入方式,需要对handler处理请求部分进行重写。Obspy连接FDSN代码初始参数设置如下:
obspy.clients.fdsn模块连接初始数据
def __init__(self, base_url=”IRIS”, major_versions=None, user=None,
password=None, user_agent=DEFAULT_USER_AGENT, debug=False,
timeout=120, service_mappings=None, force_redirect=False,
eida_token=None, _discover_services=True):
: type user: str
: param user: User name of HTTP Digest Authentication for access to restricted data.
: type password: str
: param password: Password of HTTP Digest Authentication for access to restricted data.
修改handler中的相关代码,涉及HTTP请求头的解析、摘要认证信息提取与验证,以及与用户凭证数据库的比对等环节,使其能够自动识别并处理来自客户端的摘要认证请求,实现了用户鉴权,提升了数据访问安全。
HTTP摘要认证使用摘要算法验证用户身份,具体认证过程见图 1。首先,用户向FDSN web服务端发送数据请求。服务端在接收到用户访问请求后,为进行HTTP摘要认证,会在响应头中携带一个临时质询码(nonce),此为随机生成的数值,主要用于确保每次认证过程中计算的摘要值具有唯一性,从而增加认证的安全性。同时,服务端会向客户端返回401状态码,表明客户端需要进行授权认证才能访问所请求数据。
客户端在接收到服务端发送的信息后,会使用预定义的摘要算法,结合用户名、密码、请求方法(如GET、POST等)、请求资源URI以及接收的nonce质询码,计算特定摘要值,也就是response码,并将其发送至服务器端。服务器端在接收到该response码后,会使用相同摘要算法和之前发送的nonce质询码,以及服务器端存储的用户名和密码信息,计算一个理论摘要值,并将其与客户端发送过来的response码进行比较。若两者不一致,服务端会返回403状态码表示认证失败,客户端无权访问请求数据。若两者一致,则表示认证成功,服务端会根据请求的具体情况返回相应状态码和数据。通常,如果请求资源存在且无其他错误,服务端会返回200状态码和请求数据;如果请求资源不存在但认证成功,服务端可能返回204状态码,表示“无内容”,即认证成功但当前无可返回数据。FDSN web服务端计算摘要值代码如下:
import hashlib
H = lambda x: hashlib.md5(x.encode(“ascii”)).hexdigest()
KD = lambda s, d: H(“%s: %s” % (s, d))
user = “admin”
realm = “FDSNWS”
pw = “password”
A1 = “%s: %s: %s” % (user, realm, pw)
uri = “/fdsnws/dataselect/1/queryauth?starttime=xx & endtime=xx & network=TJ & station=XX & location=00 & channel=BHZ”
nonce = “26a45d1bf85e97fbe5cefbddcf123587”
ncvalue = “00000002”
cnonce = “77057036ac20bc4d”
A2 = “%s: %s” % (“GET”, uri)
noncebit = “%s: %s: %s: %s: %s” % (nonce, ncvalue, cnonce, ‘auth’, H(A2))
respdig = KD(H(A1), noncebit)
3 FDSN服务鉴权验证实现通过模拟不同的访问请求来进行鉴权验证,具体流程如下:客户端发送一个访问请求,服务器端接收该请求后返回一个401状态码,提示客户端进行身份认证。同时,服务器通常会在响应头中包含认证相关信息,如质询码(nonce)等,并在客户端弹出用户名和密码输入框以供用户输入凭证。弹出页面见图 2。
用户名和密码信息被用于计算摘要值,并随下一个请求一起发送至服务器。若输入的用户名和密码错误,服务器端在验证后会返回403状态码(图 3),表示用户无权限访问请求资源,拒绝用户获取数据。用户输入正确的用户名和密码,服务端通过计算摘要值予以验证,验证成功后允许访问请求资源,后续进行数据请求预处理,若访问数据不存在,则服务器返回204状态码(图 4),表示认证成功但当前无可返回内容,若访问数据存在,则返回200状态码(图 5),且响应中包含请求数据。在返回200状态码的同时弹出下载页面(图 6),供用户下载所需波形文件,下载完成后,即可见波形文件已成功下载到本地。为了验证文件的正确性和完整性,利用Obspy打开查看并核对所下载波形文件的详细参数(图 7),如:starttime(起始时间)、endtime(结束时间)、network(网络代码)、station(台站代码)等,若与发送访问请求时所指定参数一致,则证明下载的波形文件准确且符合预期。
针对FDSN服务鉴权问题,通过分析FDSN服务源码,采用HTTP摘要认证机制,设计实现了鉴权核心模块并进行了验证。结果表明,可以达到授权用户访问地震波形数据的目标,提升了FDSN服务系统的数据安全访问控制。下一步,将结合业务应用场景,结合数据粒度的授权和角色等,解决数据访问控制问题,即结合用户授权、角色和数据关系等,解决FDSN针对不同用户可访问不同数据的业务场景,在为科研人员提供便捷数据服务的同时,可有效降低数据泄露和滥用风险,提升数据安全性。
韩雪君, 陈宏峰, 赵国峰, 等. 中国地震台网波形数据整理及服务平台建设[J]. 中国地震, 2023, 39(2): 412-424. |
李晓姝, 郭飚, 周聪. SeisProc: 基于ObsPy库的地震数据处理软件[J]. 地震地磁观测与研究, 2022, 43(3): 147-156. |
谢有顺, 李盛乐, 刘小利, 等. 面向地震行业的地震数据共享服务平台的设计与实现[J]. 大地测量与地球动力学, 2017, 37(5): 546-550. |
International Federation of Digital Seismograph Networks. FDSN Web service specifications version 1.2[EP/OL]. (2019-06-27). http://fdsn.org/webservices/FDSN-WS-Specification-Commonalities-1.2.pdf, 2019.
|
Krischer L, Megies T, Barsch R, et al. ObsPy: a bridge for seismology into the scientific Python ecosystem[J]. Computational Science & Discovery, 2015, 8(1): 014003. DOI:10.1088/1749-4699/8/1/014003 |