访问Hyperledger Composer setDefault API时遇401未授权错误求助
结合你描述的情况——同项目下其他API(ping、wallet/import等)都能正常调用,唯独这个setDefault接口返回401,我梳理了几个最可能的原因和对应的解决思路:
请求参数传递错误(最可能)
Angular的HttpClient.post方法参数顺序很关键:第一个是请求URL,第二个是请求体(body),第三个才是请求配置选项(options)。你当前的代码把{withCredentials:true}放在了第二个参数的位置,这会导致这个配置根本没生效,请求没带上认证所需的Cookie,自然返回401。而其他正常的API应该是正确传递了options(比如GET请求的第二个参数就是options)。
修正后的代码应该是这样的:this.http$.post(`${url}/api/wallet/${a.name}/setDefault`, {}, {withCredentials:true}) .subscribe(res => console.log(res));如果这个接口确实不需要请求体,第二个参数传空对象即可,把
withCredentials放在第三个参数的配置项里。后端接口权限/方法配置异常
有可能后端对setDefault接口的权限校验规则和其他接口不一样,比如要求更高的权限等级,或者路由配置时漏掉了该接口的认证放行逻辑。另外也可以检查下后端是否期望这个接口用PUT方法而不是POST?如果后端定义的是PUT,你用POST调用也可能触发权限相关的错误。路径变量格式问题
看看a.name的值是否包含URL需要转义的特殊字符(比如空格、中文、&等),导致实际请求的URL格式错误,后端无法匹配到正确的接口,返回的401可能是一个误导性的错误。你可以打开浏览器开发者工具的Network标签,查看这个请求的实际URL,对比其他正常请求的路径格式是否一致。认证凭证时效性问题(概率较低)
虽然其他接口正常,但也不排除调用setDefault时,认证凭证刚好过期的情况。可以尝试刷新页面后重新触发这个接口调用,看看是否还是返回401。
内容的提问来源于stack exchange,提问作者naik3

