【发布时间】:2018-09-27 22:10:36
【问题描述】:
我正在尝试使用 okhttp 在 android 中签署对 aws api 网关的 http 请求。我或多或少地使用了这个stackoverflow问题stackoverflow question中的代码
我使用 CognitoCachingCredentialsProvider() 来获取 credentialsProvider 对象。然后我使用 getCredentials() 来获取凭据。然后我使用以下内容:credentials.getAWSAccessKeyId()、credentials.getAWSSecretKey() 和 credentials.getSessionToken() 来获取必要的密钥和令牌。我在邮递员中使用它们并且能够成功执行 api 网关。
使用 okhttp 在 android 中请求失败,返回代码 403 并显示消息“缺少身份验证令牌”。
这就是我准备请求的方式:我构建了一个 DefaultRequest 对象,设置端点和 httpmethod。然后我使用 AWS4Signer 对请求进行签名,将凭证对象作为 signer.sign(defaultRequest, credentials) 参数传递。
我通过在 defaultRequest 上调用 getHeaders() 来获取标题映射。我创建了两个列表,一个称为键的键,一个称为值的值。然后我循环遍历地图,将键和相应的值加载到两个列表中。
然后我按如下方式构建我的 okhttp 请求:
Request request = new Request.Builder()
.url(my ApiEndPoint)
.addHeader(key.get(0), value.get(0))
.addHeader(key.get(1), value.get(1))
.addHeader(key.get(2), value.get(2))
.addHeader(key.get(3), value.get(3))
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.post(body)
.build();
我注意到以下几点:
在标头映射中,键 x-amz-security-token 具有值 ....以 hKADF87VZ44w9IvZ1gU= 结尾
打印出 okhttp 请求,键 x-amz-security-token 有一个值 .... 以 hKADF87VZ44w9IvZ1gU\u003d 结尾
= 被 \u003d 取代,这可能是问题吗?如果有,如何预防?
否则,我们将不胜感激任何解决此问题的帮助。
谢谢
【问题讨论】:
标签: android aws-api-gateway okhttp3