具有 Angular 本机 $http 服务的 AWS API 网关

AWS API Gateway with Angular native $http service

我有使用 Cognito 临时凭证的 AWS API 网关。 我想设置 angular 本机 $http 服务以使用 api 和所需的 aws4 身份验证 headers。 我尝试使用 https://github.com/mhart/aws4 但我得到 InvalidSignatureException

有什么方法可以为 front-end 应用程序生成 aws4 身份验证 headers?有没有人有在没有自动生成 SDK 的情况下设置应用 API 网关的经验?

我希望 aws4 库能够正常工作 - 它可能与您使用它的方式有关。如果你能 post 一些代码,它可能有助于诊断。

集成 API 网关 API 的最简单方法是为您的 API 使用生成的 JS SDK。如果您不想使用它,您仍然可以 re-use 生成的 SDK 中的一些 SigV4 实用程序,并将签名过程集成到您的 Angular 客户端中。

谢谢, 瑞安

我写了一个 angular 模块 - angular-aws-apig on top of aws4 npm 包。它为 $http 服务提供拦截器。

angular.module('app', ['angular-aws-apig'])
.config(function Config($httpProvider, APIGInterceptorProvider) {
    APIGInterceptorProvider.config({
        headers: {},
        region: 'us-east-1',
        service: 'execute-api',
        urlRegex: ''
    })

    /* @ngInject */
    APIGInterceptorProvider.headersGetter = function(myService, request) {
        myService.doSomething();
        return request.headers;
    };

    /* @ngInject */
    APIGInterceptorProvider.credentialsGetter = function(store, request) {
        return store.get('credentials');
    };

    $httpProvider.interceptors.push('APIGInterceptor');
});

它允许在请求之前解析 AWS IAM 凭据。与 AWS CognitoAuth0 一起使用可能很方便,因为它们提供临时 IAM 凭证以交换用户令牌。这些凭据随后可用于安全访问 APIGateway。