【发布时间】:2016-09-17 02:37:03
【问题描述】:
我正在阅读有关 XMPP 身份验证流程的内容。我知道响应是在客户端使用这样的算法计算的
- 创建格式为“用户名:领域:密码”的字符串。将此字符串称为 X。
- 计算 X 的 16 个八位字节的 MD5 哈希。将结果称为 Y。
- 创建格式为“Y:nonce:cnonce:authzid”的字符串。将此字符串称为 A1。
- 创建格式为“AUTHENTICATE:digest-uri”的字符串。将此字符串称为 A2。
- 计算 A1 的 32 位十六进制数字 MD5 哈希。调用结果 HA1。
- 计算 A2 的 32 位十六进制数字 MD5 哈希。调用结果 HA2。
- 创建格式为“HA1:nonce:nc:cnonce:qop:HA2”的字符串。将此字符串称为 KD。
- 计算 KD 的 32 位十六进制数字 MD5 哈希。调用结果 Z。
这嵌入在结构中的响应字段中。
解码挑战响应的一个例子是
username="rob",realm="cataclysm.cx",nonce="OA6MG9tEQGm2hh",cnonce="OA6MHXh6VqTrRk",nc=00000001,qop=auth,digesturi="xmpp/cataclysm.cx",response=d388dad90d4bbd760a152321f2143af7,charset=utf-8,authzid="rob@cataclysm.cx/myResource"
但我担心的是,我在任何地方都没有看到该特定响应字段是如何在服务器上使用的?有没有真正使用这个的用例。有人可以引用参考/见解/实现如何使用响应字段以及它实际上如何在确定用户的真实性方面发挥作用。
谢谢!
【问题讨论】:
标签: xmpp chat md5 ejabberd sasl