AWS Appsync Graphql Java 客户端 - IAM 授权
AWS Appsync Graphql Java Client - IAM authorisation
这是我已为其实现业务逻辑的模式
type Query {
getLicenseInformation(localmd5: String): License @aws_cognito_user_pools
getUserInformation(username: String!): CognitoUser @aws_iam
listUsers(searchString: String): [NamedResource] @aws_iam
}
我使用 RestTemplate 作为我的 Java 客户端来使用 graphql 端点并提供 API 密钥作为授权。我将 api 键添加到 header 部分作为 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;
}
这是我已为其实现业务逻辑的模式
type Query {
getLicenseInformation(localmd5: String): License @aws_cognito_user_pools
getUserInformation(username: String!): CognitoUser @aws_iam
listUsers(searchString: String): [NamedResource] @aws_iam
}
我使用 RestTemplate 作为我的 Java 客户端来使用 graphql 端点并提供 API 密钥作为授权。我将 api 键添加到 header 部分作为 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;
}