心理测评系统接入统一登录,接通账号就算完成了吗?

统一登录需要分别验证身份、凭证复用防护和本地授权,纠正OAuth与OIDC混用、签名等同加密及短有效期等同防重放。

从校园门户点开心理测评系统,不再输入一次密码,说明登录流程跑通了。但这个演示还回答不了三个问题:系统凭什么认定来的人是谁,这次登录凭证能不能被别人再次使用,以及登录后能查看哪些资料。

对接统一登录,需要把这三件事分别验证。尤其是心理报告这样的敏感资料,不能因为页面跳转成功,就认为身份校验和访问权限都已经可靠。

先看接入的究竟是什么协议

SSO是单点登录的效果,不是一种具体协议。技术对接单上只写“支持OAuth 2.0”,还不足以说明已经具备标准化的身份认证能力。

OAuth 2.0主要解决授权访问;OpenID Connect(OIDC)在其基础上增加身份层。采用OIDC时,心理系统作为依赖方,通过规定的流程取得并验证ID Token,确认身份。Access Token主要用于访问受保护资源,不能仅因为拿到了它,就自行当作已完成身份认证。OIDC Core

如果现有门户提供的是基于OAuth的专有登录接口,就应查清它如何证明身份、怎样绑定请求、适用于哪个系统。不能把“接口能返回姓名和学号”直接写成符合OIDC。实际项目也可能采用SAML等其他协议,需按对应协议核验,本文只展开OIDC及旧式跳转的几个易错点。

在OIDC授权码流程中,回调拿到授权码只是中间一步。后续还要按规范核验ID Token的签发者、受众、有效期及适用的签名要求;发起请求时使用了nonce,就要核对返回值。身份关联应以约定身份域中的稳定标识为依据,OIDC通常使用签发者与sub的组合,不能仅凭同名就合并档案。OIDC身份令牌校验与标识稳定性

有签名,不代表内容已经加密

一些旧门户会把身份参数和签名一起放进跳转链接。这里要分清:数字签名用于验证完整性和来源,并不自动隐藏被签名的内容;HMAC是基于共享密钥的消息认证码,也不是加密。把学号编码成Base64同样不能获得保密性。RFC 7515

所以,“用了RSA”不是完整的安全说明。需要明确采用的是签名还是加密、算法和密钥怎样管理、接收方怎样验证,以及信息会经过哪些地方。即使用了HTTPS,放在URL里的凭证仍可能进入浏览历史、日志等位置;应减少浏览器前端暴露的身份数据,避免把可反复使用的登录凭证放进链接。RFC 9700,第4.2—4.3节

对必须保留的旧式跳转,可以评估改为短时、一次性、限定接收方的兑换凭证,由后端完成兑换。但这只是设计方向,不能拿来替代完整安全评审,也不能把自建协议宣称为标准OIDC。

短有效期只缩短风险窗口,不能阻止窗口内重放

假设一个登录链接五分钟内有效。别人拿到它,在第三十秒再次访问,时间戳检查仍然可能通过。超过有效期只说明凭证过期,不能据此判断它一定遭到过重放。

防重放需要结合具体流程设计。授权码应按协议一次性使用;PKCE把授权码兑换与发起请求的一方关联,OIDC的nonce帮助把ID Token与当前登录请求关联。相关值必须为当前事务生成,并安全绑定到发起事务的客户端与浏览器会话,不能给所有人复用一个固定值。RFC 7636、RFC 9700,第2.1.1节

如果使用自定义一次性票据,还应有服务端的已使用状态,并保证并发请求不能同时兑换成功。只增加随机编号,却不检查它是否用过,也不能实现一次性使用。应使用成熟协议实现和经过审查的组件,而不是把几个安全参数拼在一起就结束对接。

身份确认以后,再决定允许做什么

学校确认“这是某位教师”,并不等于允许这位教师查看所有学生的心理报告。组织归属、业务角色、项目范围和个体报告权限,仍需由本地授权规则处理。

组织信息也未必必须塞进每一次登录返回值里。它可以来自经授权的目录同步或其他可信接口;关键是来源、映射和更新规则明确。首次登录遇到未知学院或角色时,不能未经约定就自动创建管理角色、扩大权限。账号停用、调岗以及上游同步失败时,怎样处理现有会话和权限,同样要约定。

关于角色与范围的详细检查,可以继续阅读单点登录接好了,权限为什么还是会乱?。登录页面上的按钮不负责替机构决定这些业务边界。

验收时,除了成功登录一次,还应使用测试账号验证:不匹配的受众或签发者被拒绝;过期和不匹配当前请求的凭证被拒绝;已用授权码不能再次兑换;普通用户无法跨范围读取报告;退出或停用后,各端会话按约定处理。测试范围和操作需在双方授权的环境内确定。

统一登录是否完成,最终应有一份可复核的记录:采用什么协议、如何校验身份、如何防止凭证被错误复用、权限怎样分配,以及异常时怎样拒绝访问。能够解释并验证这些过程,接入结果才比“点一下就进去了”更有说服力。

Leave a Reply

Your email address will not be published. Required fields are marked *