【问题标题】:AWS Appsync Graphql Java Client - IAM authorisationAWS Appsync Graphql Java 客户端 - IAM 授权
【发布时间】:2021-09-23 16:41:20
【问题描述】:

这是我实现业务逻辑的架构

type Query {
     getLicenseInformation(localmd5: String): License @aws_cognito_user_pools
   getUserInformation(username: String!): CognitoUser @aws_iam
    listUsers(searchString: String): [NamedResource] @aws_iam
}

我使用 RestTemplate 作为我的 Java 客户端来使用提供 API 密钥作为授权的 graphql 端点。我在标题部分中将 api 密钥添加为 x-api-key。

        RestTemplate restTemplate=new RestTemplate();
        HttpHeaders requestHeaders = new HttpHeaders();

        requestHeaders.set("x-api-key",api_key.getId());
        requestHeaders.set("Content-Type","application/graphql");

        HttpEntity entity = new HttpEntity(requestHeaders);
        ResponseEntity<String> exchange = restTemplate.exchange(URL, HttpMethod.POST, new HttpEntity(query,requestHeaders),String.class);

上述实现从后端检索值。 但是根据其他团队定义的架构,授权模式不是API密钥而是iam。所以我必须相应地配置其余模板。

我可以在 Java 客户端代码的哪个位置进行配置,以便将 aws_iam 用作从端点检索信息的授权方法。 Dynamodb 是数据源

【问题讨论】:

    标签: java amazon-web-services graphql amazon-iam resttemplate


    【解决方案1】:

    如下构建请求对象有帮助:

    private DefaultRequest prepareRequest(HttpMethodName method, InputStream content) {
            Map<String,String> headers = new HashMap<>();
            headers.put("Content-type", "application/json");
            headers.put("type", "AUTH_TYPE.AWS_IAM");
            headers.put("X-Amz-Security-Token",securityToken);
            DefaultRequest request = new DefaultRequest(API_GATEWAY_SERVICE_NAME);
            request.setHttpMethod(method);
            request.setContent(content);
            request.setEndpoint(this.endpoint);
            request.setHeaders(headers);
    
            return request;
        }
    

    【讨论】:

      猜你喜欢
      • 2020-03-27
      • 2021-08-13
      • 2018-07-04
      • 2015-12-26
      • 2018-07-30
      • 1970-01-01
      • 2020-12-11
      • 2019-07-01
      • 1970-01-01
      相关资源
      最近更新 更多