如何使苹果 iap 服务器通知端点安全
how to make apple iap server notification endpoint security
现在我在 spring 引导项目中定义一个端点来接收苹果服务器通知:
@Api
@RequestMapping("/post/notification")
@FeignClient(name = "dolphin-post-service")
@Validated
public interface IAppleServerNotificationController {
/**
* Receive Apple Server Notification
* @param
* @return
*/
@PostMapping("/v1/appleSeverNotification")
Response<Integer> handleNotification(@RequestBody ServerNotificationRequest request);
}
请求:
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServerNotificationRequest implements Serializable {
@ApiModelProperty(value = "responseBody")
private String responseBody;
}
但是我服务器端的 api 有调用权限,现在我面临的问题是:如果我有 api 的权限,苹果服务器无法调用,因为苹果服务器没有实施 auth 2.0 从我的服务器获取 accessToken。如果我删除端点的身份验证,这意味着任何人只要知道地址就可以调用端点。
那么我应该怎么做才能使端点安全并允许苹果调用?我应该保持端点不是 public 吗?但有些工具会嗅探 url 我认为。我该怎么办?
现在我在服务器端验证共享密钥是这样的:
@Override
@NoCheck
public Response handleNotification(ServerNotificationRequest request) {
if (!SHARED_SECRET.equals(request.getSharedSecret())) {
log.error("illegal invoke:" + JSON.toJSONString(request));
return new Response();
}
saveNotification(request);
return new Response<>();
}
现在我在 spring 引导项目中定义一个端点来接收苹果服务器通知:
@Api
@RequestMapping("/post/notification")
@FeignClient(name = "dolphin-post-service")
@Validated
public interface IAppleServerNotificationController {
/**
* Receive Apple Server Notification
* @param
* @return
*/
@PostMapping("/v1/appleSeverNotification")
Response<Integer> handleNotification(@RequestBody ServerNotificationRequest request);
}
请求:
@Data
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServerNotificationRequest implements Serializable {
@ApiModelProperty(value = "responseBody")
private String responseBody;
}
但是我服务器端的 api 有调用权限,现在我面临的问题是:如果我有 api 的权限,苹果服务器无法调用,因为苹果服务器没有实施 auth 2.0 从我的服务器获取 accessToken。如果我删除端点的身份验证,这意味着任何人只要知道地址就可以调用端点。
那么我应该怎么做才能使端点安全并允许苹果调用?我应该保持端点不是 public 吗?但有些工具会嗅探 url 我认为。我该怎么办?
现在我在服务器端验证共享密钥是这样的:
@Override
@NoCheck
public Response handleNotification(ServerNotificationRequest request) {
if (!SHARED_SECRET.equals(request.getSharedSecret())) {
log.error("illegal invoke:" + JSON.toJSONString(request));
return new Response();
}
saveNotification(request);
return new Response<>();
}