【发布时间】:2021-10-03 09:27:26
【问题描述】:
我正在尝试通过我在 Spring Boot 中配置的 REST API 端点从 AWS Secrets Manager 获取凭证。如果我输入端点的 URL + 参数,我会得到我期望的对象。具有端点的站点也通过 AWS 托管。
当我尝试从我的 Angular 开发服务器访问端点时,我总是得到未经授权的 401。我使用 Angular 的代理来访问跨域端点,以便 Cognito 进行身份验证,访问 Lambda 端点等等,从来没有遇到过问题,但我无法让它与这个 Spring Boot 端点一起工作。在与 AWS Support 进行了长时间通话后,我认为这不是 Secrets Manager 甚至是 AWS 问题。
Spring 端点(我非常 Java 新手,所以这可能需要特定的标头?):
@GetMapping("/REST/getSecret")
public String getSecret(@RequestParam String name) {
String secretName = getSecretByName(name);
JsonParser parser = new JsonParser();
Object secretObj = parser.parse(secretName);
JsonObject secretKeys = (JsonObject) secretObj;
return secretKeys.toString();
}
Angular 服务检索密钥:
getSecret(secretName: String): Observable<any> {
const headers = new HttpHeaders({
'Content-Type': 'application/json',
'Cache-Control': 'public' // likely unecessary, was trying to make sure cache was clearing at the time
});
return this.http.get<any>(
// this.secretConfig.getSecretUrl() + `/getSecret?name=${secretName}`, // Live Site
this.secretConfig.getSecretUrl() + `/getSecret/${secretName}`, // Dev
{
headers: headers
}
).pipe(map(secret => JSON.parse(secret)));
}
Live Site 评论只是展示了在整个托管过程中什么是有效的
角度代理:
"/getSecret": {
"target": "https://websiteurl.com/REST/getSecret?name=",
"secure": false,
"logLevel": "debug",
"changeOrigin": true
}
代理配置看起来很有趣,但这正是我设置它以通过 Lambda 函数运行带有参数的搜索并且按预期工作的方式。
此时我唯一的猜测是我可能需要在我的 REST 端点上设置特定的标头,并且在尝试通过 Angular HTTP 调用提取数据时?如果是标头问题,那么我可能会使用在 8080 上运行的 Spring Boot 和在 4200 上运行的 Angular 在本地测试所有内容。目前,当两个实例在本地运行时会发生相同的错误。
非常感谢任何帮助!
【问题讨论】:
标签: angular amazon-web-services spring-boot proxy aws-secrets-manager