登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: 一个简单认证算法 ejabberd 与 openfire 协议上的区别及其他     [回主站]     [分站链接]
一个简单认证算法 ejabberd 与 openfire 协议上的区别及其他
clq
浏览(296) - 2019-08-29 15:23:13 发表 编辑

关键字: xmpp_doc

[2019-09-04 11:12:40 最后更新]
一个简单认证算法 ejabberd 与 openfire 协议上的区别及其他

我们的 xmppmini 客户端目录已经完成了对 openfire 服务器的兼容,今天想做一下  ejabberd 的兼容,没想到两者的差别还不少。
最主要的是居然在最简单的 PLAIN 认证算法上卡了很久。 -- 我们测试的是 ejabberd-19.08-windows 版本

算法见于 https://tools.ietf.org/html/rfc4616
文章比较长,其实就是说密码为 base64 编码的以下串 "authzid[分隔符]authcid[分隔符]password" ,其中的 [分隔符] 也很简单,就是 C 语言里的 \0 即 delphi 中的 #0 或者是 NUL NULL 。
关键是我无论如何都登录不上去,测试了好久,发现不加域名可以,但这显然不对,因为一个服务器肯定是要对应多个域名的。又测试了好久终于发现了是第一个 authzid 中不能带域名 .....
然后我发现网友是将 authzid 设置为空的...

在协议中有
"
授权标识(authzid)、身份验证标识(authcid)、密码(passwd)和NUL字符分隔符转换为[UTF-8]编码的[Unicode]字符字符串。
作为NUL (U+0000)字符用作分隔符,NUL (U+0000)字符不能出现在authzid、authcid或passwd产品中。

authzid产品的形式是特定于应用程序-的层协议的SASL概要文件[SASL]。authcid和passwd产品正在形成。
使用不可见字符或用户可能无法在某些键盘上输入的字符是气馁
"
协议中说认证是由 身份验证标识(authcid)、密码(passwd) 来决定的,和第一个参数 authzid 关系并不大,而 ejabberd 的做法显示是将它也作为了验证算法的一部分,我个人觉得 openfire 的做法更为合适,兼容性更高。后面还有几个示例也说明了 openfire 的兼容性更高,特别是对 xml 流的解码来说,ejabberd 的解码显然没有做好,字符的微小问题都可能导致过不了关,而 openfire 甚至能兼容两过连续的引号这样的错误。

以前我是很不喜欢 openfire 的,不料和 ejabberd 一对比,openfire 就算优秀了 ... :)

另外,要在 ejabberd 上使用 PLAIN 认证还得修改一下配置,而这个配置又是不能在它的管理页面中修改 ... 唉。
好吧,办法是修改文件
C:/ProgramData/ejabberd/conf/ejabberd.yml 中的 starttls_required 为 false

再另外,ejabberd 是没有默认的 5223 的安全端口监听的,要想用的话也还是得自己修改配置文件...

--------------------------------------------------------
2.ejabberd对非 utf8 的中文(或者其他非英文)字符串是非常不友好的,一不小心就会显示 xml 节错误,不允许等于之类的字眼。而这在 openfire 中是无伤大雅的。所以我们能用英文的地方还是用英文吧。
比如下面的 presence "用户在线状态" 干脆就不要什么中文的 "在线" 了,直接一个英文 online 省事。实在想显示为中文就包装一下 utf8 ,只不过因为我会在多个语言中同时开发所以时常会忘记这种转换
 -- 因为很多语言现在默认就是 utf8 的字符串了。

            //这个是 spark 的回应,psi 的回应其实并没有中文
            //openfire 可以,但 ejabberd-19.08-windows 一定要转换成 utf8 ,所以还不如用英文状态好了
            //具体要求见后面注释部分的解释
            //s_presence := '<presence id="' + s_id + '"><status>在线</status><priority>1</priority></presence>'; //no ejb...
            ////s_presence := '<presence id="' + s_id + '"><status>' + AnsiToUtf8('在线') + '</status><priority>1</priority></presence>'; //ok ejb..
            s_presence := '<presence id="' + s_id + '"><status>' + AnsiToUtf8('online') + '</status><priority>1</priority></presence>'; //ok ejb..


--------------------------------------------------------
3.ejabberd 在与服务连接时需要填写服务器域名的地方一定要正确填写,否则是会失败的。例如第一名句 "stream" 中的域名。
我个人觉得这种做法很无聊 -- 我要是多域名的服务器,咋办?


 


总数:0 页次:1/0 首页 尾页  
总数:0 页次:1/0 首页 尾页  


所在合集/目录
xmppmini协议 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1