1

Aliyun STS golang sdk Error (405:Method Not Allowed)

 1 year ago
source link: https://ioridy.github.io/2021/01/29/aliyun-sts-405-method-not-allowed/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Aliyun STS golang sdk Error (405:Method Not Allowed)

2021-01-29

之前用的aliyun golang sdk 完成了STS的授权功能,今天因为要加短信的功能,就顺便升级了aliyun golang sdk的版本,编译没有任何问题,结果发布的时候发现之前sts的获取token接口报405:Method Not Allowed, 因为没有改任何code,知道是因为sdk升级带来的问题,但是不清楚是因为什么,于是debug了下,找到了原因记录下。

debug发现新版本sdk的出现问题是因为sdk内部根据传入的regionId计算出来的endpoint错误,导致405错误, 所以修改了regionId即可正确访问。

上面找到问题后,就好奇为什么同样的配置旧版本的sdk就可以调用成功能,于是有切换了旧版sdk做了debug后发现,主要是旧版本的enpoint解析在几个分支都失败后,会有个全局默认的,所以最终可以得到一个正确的endpoint,但是新版的解析器逻辑修改了,导致了问题出现。

关于regionId这里要注意:

  • 我用到的OSS有自己的regionId,会根据你买服务的地区不同而不同,设置错误无法访问

    OSS的regionId(比如我用的:oss-cn-beijing)的格式和其他(比如STS和SMS的都是:cn-hangzhou)都不同,我这边的错误就是因为要做OSS业务,看到sdk要regionId参数,就直接使用了(旧版本sdk还正确访问了- -!)

  • STS没有自己的regionId,是在系统给的自己选(但是sdk里面不同的regionId还是都匹配到同一个host,不了解逻辑是做什么)

ps: sdk里面的endpoint解析逻辑有点复杂,不清楚业务背景不太懂为什么要这样做,比如外边设置了regionId,但里面都用EndpointMap被匹配到一个host,很奇怪。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK