2016-11-28 45 views
0

我们有一个Cordova APP,它调用具有自定义安全性的API。现在通过MFP上传和下载Cordova中的资源

,我们迁移到IBM MFP 8.0

我跟着https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/protecting-external-resources/提供的步骤来保护外部资源和https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/application-development/resource-request/javascript/通过科尔多瓦打电话。

应用程序使用该插件2个事科尔多瓦 - 插件 - 文件传输:

  • 从受保护的REST端点下载的图像文件系统和在HTML中使用(例如,用户的个人资料照片)
  • 上传图像到受保护的REST端点(例如,上传从画廊用户个人资料照片)

它的工作,因为插件可以发送自定义页眉。

如何实现与MFP保护端点相同的功能?

更新:

其余的API,它是工作,现在它受到保护由MFP使用机密客户的外部资源。

API使用Spring的多部分上传和产生的byte [] PNG下载:

@RequestMapping(value = PROFILE_UPDATE_USER_PROFILE_PHOTO, 
     method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) 
@Override 
public ResponseEntity<DataOutput<APIError[], ProfilePhotoOutput>> updateUserProfilePhoto( 
       MultipartFile file) { 

     return profileController.updateUserProfilePhoto(file); 
}   

@RequestMapping(value = PROFILE_GET_USER_PROFILE_PHOTO, 
     method = RequestMethod.GET, produces = {MediaType.IMAGE_GIF_VALUE, MediaType.IMAGE_JPEG_VALUE, MediaType.IMAGE_PNG_VALUE}) 
@ResponseBody 
@Override 
public ResponseEntity<byte[]> getUserProfilePhoto() { 
     return profileController.getUserProfilePhoto(); 
} 

回答

0

我会推荐这种情况下暴露给二进制内容(例如:照片)您的访问通过JavaAdapter,它可以为您提供更多的自由度,使您可以从MFP服务器提交和返回的有效载荷类型。

一种方法是将图片作为Base64处理并在JSON内发送。可以使用相同的过程来阅读照片。

@PUT 
@Path("/addPhoto") 
@Produces("application/json") 
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_FORM_URLENCODED}) 
public String receivePhoto(@FormParam(value="photoId") String photoId, @FormParam(value="data") String photoData){ 
//Process your photo, convert from base64 to the format of choice. 
} 

这里的关键点是使用注解@Produces和@Consumes共同探讨处理您的二进制数据的最佳方式。如果它的格式更紧凑(比如png/jpeg raw)或者可以在JSON响应中使用的Base64。

https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/adapters/java-adapters/java-http-adapter/

根据如何您的负载的多少是基于二进制的格式,这将值得检查,如果使用“机密客户端”或“保护外部资源”的不会多拨您使用案件。除了在MFP中创建适配器之外,您可以使用MobileFirst来帮助安全设置,但第三方层处理二进制数据操作。

机密的客户:https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/confidential-clients/

保护,外部资源:https://mobilefirstplatform.ibmcloud.com/tutorials/en/foundation/8.0/authentication-and-security/protecting-external-resources/

在尽可能短的替代品:

  • 使用按Base64编码的二进制文件
  • 探索JavaAdapters处理自定义负载
  • 通过探索“保密”第三方保护访问客户“或”保护外部资源“的替代品。

希望此信息帮助,

+0

嗨。我已经在使用保护当前API作为外部资源的方法。更具可维护性和运行时效率的方式。我用当前的Spring API更新了这个问题。您建议在API中使用base64添加新方法,使用某个插件读取/存储图像,然后使用MFP ResourceRequest发送/接收? –

+0

通过使用MFP保护外部资源,您可以直接向您的移动客户展示您的第三方api,如果您认为您不相信您的第三方API在您的应用访问高峰时段做出响应并且想要使用和适配器在它的前面。在这种情况下,您可以使用JavaAdapter并探索Base64(用于JSON)或某些自定义数据类型,并使用HTTP响应代码来指导您的客户端返回什么。例如:200是OK,404没有找到... – Cesar

+0

在这种情况下,我发现适配器(JavaAdapter)可以作为阀门来控制后端压力,因为您可以通过配置发送到第三方API的请求数量adapter.xml定义文件。虽然,这可能会增加一些开销来处理文件,具体取决于您处理的图像/视频的大小。 – Cesar