java - AWS Appsync Graphql Java 客户端 - IAM 授权
问题描述
这是我实现业务逻辑的架构
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 是数据源
解决方案
像下面这样构建请求对象有帮助:
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;
}
推荐阅读
- javascript - Google maps API 在每个按钮中显示全屏和缩放图标 3 次
- python - 使用格式打印多个列表
- ios - 在文本字段swift中附加逗号作为用户输入
- javascript - RxJS - 哪个运算符可以结合最近 N 个事件的历史?
- facebook - 为什么即使在应用审核后也无法获取 Facebook 事件?
- string - 串行数据从连续字符串读取并解析为变量(Arduino)
- c# - 知道我将使用syncfusion来制作我的UI控件,学习Windows窗体或WPF会更好吗?
- c# - 如何从 UserControl 实时获取结果?
- amazon-web-services - Terraform 中的相对路径
- php - SOAP:过程“helloRequest”不存在