
登录消息先说明为哪个服务签名
区块链数字身份安全可以从一次账户登录请求讲起。EIP-4361定义的SIWE让以太坊账户通过签署规定格式的链下消息进行认证。服务接到签名后,还要核对消息内容与本次请求是否相符;不能只看签名计算通过,就跳过来源、挑战值和时间条件。
规范中的domain表示请求签名的域名信息,可包含端口;scheme表示来源所用的协议。这些值应匹配提出签名请求的实际来源。尤其在跨来源内嵌页面中,应核对内嵌页的来源,不能借外层页面名称替代。消息里的URI则指向签名所涉及的资源,不能仅凭某一行出现熟悉名称就合并这些字段。
挑战值把签名关联到本次请求
nonce是必填的随机字符串,用于防止重放;规范要求至少八个字母或数字字符,并建议为每次会话发起选择具有足够随机性的值。满足长度格式与难以预测是不同条件,把固定文字凑到八位不能据此证明挑战安全。
设想一个虚构流程:上一次登录对应挑战甲,新一次登录期待挑战乙。有人交回一份针对甲的旧签名,即使签名本身仍能验证,也不能当作已经响应乙。这个例子说明核对预期值的必要性,没有给出真实挑战或重放步骤;具体生成方法和状态管理仍由实现确定。

生成时间与有效窗口各有含义
Issued At记录消息生成时间;可选的Not Before限定何时开始有效,Expiration Time限定签署后的认证消息何时失效。因此,看见生成时间不能推算它自带多少分钟有效期,缺少过期字段也不能据此认定网站承诺永久登录。
另设同一时区内的纸面例子:消息写明十四点十分过期,十四点十一分才提交验证时,就不应再作为有效认证消息接受。若网站此前已完成认证并创建会话,后续会话存活多久还要看其管理规则;消息的时间字段不会代替服务器执行失效处理。
认证之后还要维护会话的边界
OWASP会话管理资料要求在身份认证等权限层级变化后更新会话标识,防止把事先固定的旧标识继续用于认证状态;同时区分空闲超时与绝对超时。前者关注多久没有活动,后者限定会话总存续时间。这些超时应由服务端执行,仅靠网页倒计时不能构成完整控制。这里更新的是服务器识别已登录访问的会话标识,不是把刚才的挑战值改名保存;两者服务于认证前后不同阶段。
SIWE还要求会话绑定到账户地址,而不是可能改变的解析资源。由此可见,展示头像或名称变化,与登录会话究竟绑定谁,是两个问题。排查一次失败时,可区分来源不符、挑战不符、消息过期和会话失效,再查对应环节;无需为了说明问题而公开完整签名或会话凭据。