Diameter 中意外的第一条 EAP 消息
Posted
技术标签:
【中文标题】Diameter 中意外的第一条 EAP 消息【英文标题】:Unexpected first EAP message in Diameter 【发布时间】:2014-10-23 19:50:12 【问题描述】:所以我一直在考虑在我的服务器中添加对 Diameter EAP 的支持。在阅读了rfc4072
和rfc3748
之后,我被愚弄了一个大概的想法。
我的期望是客户端会将所谓的EAP-Start
消息(一个空的EAP-Payload
AVP)传递给我的服务器。我会以适当的 EAP 身份请求(类型 1)作为响应,直径客户端将在新的 EAP-Payload 中传递对请求的响应,然后循环将继续。
但是,当我查看来自freeDiameter
(例如this pcap)的实际 pcap 跟踪时,我注意到第一个 EAP 直径请求(No.6)已经包含一个 EAP 身份响应(!!)。有点绕过最初的往返。
虽然我在实现这个方面没有什么大问题,但我真的很想知道这是否符合 (EAP-) 规范?您可以通过响应来启动 EAP 事务吗?
【问题讨论】:
来自rfc3748
:“接收到标识符值与当前未完成请求的标识符值不匹配的响应的身份验证器必须默默地丢弃响应。”。这让我觉得这个 pcap 违反了规范。
rfc4072(EAP over Diameter)在第 2.2 章(协议概述)中提到了这种行为:“首选方法是接入设备向 EAP 客户端发出 EAP-Request/Identity 消息,然后转发EAP-Response/Identity 数据包,封装在 EAP-Payload AVP 中,作为对 Diameter 服务器的 Diameter-EAP-Request”。
你说得对:只有服务器应该发送 EAP-start,所以客户端必须以 EAP-response 开始。服务器应该忽略不存在的 EAP 连接并使用 EAP-Start 响应 ANY_ID_REQ 或类似的,因此客户端可以使用 EAP-response 再次响应(基本上发送相同的 EAP 消息两次)
【参考方案1】:
是的 - 实际上,这在规范中。
EAP认证由服务器(认证者)发起, 而许多身份验证协议是由客户端发起的 (同行)。因此,可能需要进行身份验证 添加一个或两个附加消息的算法(最多一个 往返)以便在 EAP 上运行。所以你需要 ANY 消息来触发服务器启动 EAP 序列。这就是为什么您通常会看到两次相同的消息。
【讨论】:
以上是关于Diameter 中意外的第一条 EAP 消息的主要内容,如果未能解决你的问题,请参考以下文章
是否有事件或其他方式来处理用户在 Facebook Messenger 平台上向机器人发送的第一条消息?