MarkLogic调用xdmp:http-put报XDMP-INVAUTHMETH无效认证方法错误
XDMP-INVAUTHMETH报错原因
xdmp:http-put 等内置HTTP客户端函数的authentication参数不支持application-level作为取值。application-level是MarkLogic HTTP App Server自身的服务端认证模式配置项,不属于标准HTTP认证方法范畴,直接将服务端的配置项名称填入客户端请求的认证方法参数,就会触发「无效授权方法」报错。
MarkLogic内置HTTP客户端支持的合法认证方法取值仅包括:
basic:HTTP基础认证digest:HTTP摘要认证digestbasic:优先尝试摘要认证,失败后自动回退到基础认证negotiate:Kerberos/SPNEGO协商认证cert:客户端证书认证
修复步骤
- 登录MarkLogic管理控制台,找到8016端口对应的App Server配置项,查看其实际启用的标准HTTP认证协议(应用层级认证模式下,底层默认一般启用digest认证)
- 将请求代码中
<authentication>标签的method属性替换为匹配的标准取值,若无法确认具体是digest还是basic,直接填digestbasic即可让客户端自动适配。 - 修正后的参考代码如下:
xquery version "1.0-ml"; xdmp:http-put("http://example.com:8016/v1/documents?uri=my.xml", <options xmlns="xdmp:http"> <authentication method="digestbasic"> <username>xxxx</username> <password>yyyyy</password> </authentication> <headers> <Content-type>application/xml</Content-type> <Accept>application/xml</Accept> </headers> </options>, <mydata>this is xml for the PUT body</mydata>)
补充说明:App Server配置的「应用层级认证」是指认证通过后的权限校验逻辑可由应用层代码接管,不代表HTTP请求阶段使用了自定义的非标准认证协议,请求握手阶段依然遵循标准HTTP认证规范。
内容的提问来源于stack exchange,提问作者Balan
相关产品推荐
相关产品推荐

