RestAPI:客户端授权和终端用户认证
Rest API: client authorization and end user authentication
我正在为移动应用程序 (Cordova) 开发 Web 服务 (PHP),该 Web 服务提供一些 REST APIs。
当前场景:API本身,没有身份验证,任何有端点的人都可以发出请求,但在应用层,所有操作都需要经过身份验证user(用户登录后收到一个JWT),已经实现了
问题:我想保护 REST API 仅供授权客户使用(API KEY?)。
我是否应该实现类似的东西:public 密钥和秘密 (hmac)?
我走错了路,我应该使用oauth之类的东西(*它是私有的API *)。
AWS Cognito 是保护 Rest API 的最佳综合解决方案。请检查 https://aws.amazon.com/cognito/
听起来您想对用户 添加 中的 Cordova 应用程序二进制文件进行身份验证,以确保对 PHP 服务器发出的 REST API 请求来自来自合法来源,而不是例如最终可以通过 reverse-engineered API.
抓取后端数据的流氓应用程序或脚本
OAuth/OpenID 流程通常用于验证 用户 ,而不是移动应用程序等软件,重要的是要记住,经过身份验证的真正用户仍然可以利用 REST API使用假软件。
你有两个选择:
- 自己动手
- 购买 off-the-shell 解决方案
使用 HMAC 对来自移动应用程序的 API 请求进行签名当然是个好主意,但回想一下 HMAC 函数将秘密和消息作为参数,并且秘密最终必须以单一形式存储在内存中(即使最初被混淆)并且如果使用无法混淆的 built-in 系统版本的 HMAC,则可以从移动应用程序中提取。
我强烈建议不要在移动应用程序中嵌入秘密 - 一旦应用程序在各个商店公开可用,秘密和 APIs 移动应用程序可通过逆向工程过程使用。
如果您决定在您的应用中使用 HMAC request-signing 方法,那么您绝对应该实施:
- 调试检测
- root/jailbreak检测
- 检测框架检测(如Frida),
- Man-in-the-Middle 网络代理检测
并行地,在消息中编码以允许通知 REST API,以便它可以做出保护自己的决定。此外,在本机代码中执行任何这些 - 而不是在 Cordova Javascript 代码中,因为该层和 JS/native 桥接层在移动应用程序中引入了一个弱点。
您提到了一个 "public key",但在非对称加密(例如 RSA)中,该密钥通常用于加密和验证操作。私钥用于解密和签名操作,因此它是您在应用程序中需要的 private 密钥。我永远不会提前嵌入这个。
您还可以在 HMAC 消息中包括应用的开发者签名授权,这有助于防止由其他人签名的重新打包版本。
in-band HMAC API 请求签名的另一种方法是使用 out-of-band 标记化方法,该方法使用 JWTs to express the validity of the mobile app. You can perform the mobile app validity test periodically on a remote software authentication server provide a JWT to the mobile app which can be included on every REST API request. For example, this is something Approov。
同样重要的是不要将应用 强化(混淆、字符串加密等)与 REST API 保护 混淆:在前一种情况下,您会在移动应用程序中看到价值;在后一种情况下,您会在 REST API.
后面的 data 中看到值
除非您有足够的资源,否则这是一个很难有效解决的问题,因此我建议您使用其他人已解决这些问题的解决方案,这样您就可以将精力集中在应用功能、用户体验和 time-to-market .
无论您决定如何,+1 积极主动地保护安全,希望这对您有所帮助,祝项目顺利!
我正在为移动应用程序 (Cordova) 开发 Web 服务 (PHP),该 Web 服务提供一些 REST APIs。
当前场景:API本身,没有身份验证,任何有端点的人都可以发出请求,但在应用层,所有操作都需要经过身份验证user(用户登录后收到一个JWT),已经实现了
问题:我想保护 REST API 仅供授权客户使用(API KEY?)。
我是否应该实现类似的东西:public 密钥和秘密 (hmac)?
我走错了路,我应该使用oauth之类的东西(*它是私有的API *)。
AWS Cognito 是保护 Rest API 的最佳综合解决方案。请检查 https://aws.amazon.com/cognito/
听起来您想对用户 添加 中的 Cordova 应用程序二进制文件进行身份验证,以确保对 PHP 服务器发出的 REST API 请求来自来自合法来源,而不是例如最终可以通过 reverse-engineered API.
抓取后端数据的流氓应用程序或脚本OAuth/OpenID 流程通常用于验证 用户 ,而不是移动应用程序等软件,重要的是要记住,经过身份验证的真正用户仍然可以利用 REST API使用假软件。
你有两个选择:
- 自己动手
- 购买 off-the-shell 解决方案
使用 HMAC 对来自移动应用程序的 API 请求进行签名当然是个好主意,但回想一下 HMAC 函数将秘密和消息作为参数,并且秘密最终必须以单一形式存储在内存中(即使最初被混淆)并且如果使用无法混淆的 built-in 系统版本的 HMAC,则可以从移动应用程序中提取。
我强烈建议不要在移动应用程序中嵌入秘密 - 一旦应用程序在各个商店公开可用,秘密和 APIs 移动应用程序可通过逆向工程过程使用。
如果您决定在您的应用中使用 HMAC request-signing 方法,那么您绝对应该实施:
- 调试检测
- root/jailbreak检测
- 检测框架检测(如Frida),
- Man-in-the-Middle 网络代理检测
并行地,在消息中编码以允许通知 REST API,以便它可以做出保护自己的决定。此外,在本机代码中执行任何这些 - 而不是在 Cordova Javascript 代码中,因为该层和 JS/native 桥接层在移动应用程序中引入了一个弱点。
您提到了一个 "public key",但在非对称加密(例如 RSA)中,该密钥通常用于加密和验证操作。私钥用于解密和签名操作,因此它是您在应用程序中需要的 private 密钥。我永远不会提前嵌入这个。
您还可以在 HMAC 消息中包括应用的开发者签名授权,这有助于防止由其他人签名的重新打包版本。
in-band HMAC API 请求签名的另一种方法是使用 out-of-band 标记化方法,该方法使用 JWTs to express the validity of the mobile app. You can perform the mobile app validity test periodically on a remote software authentication server provide a JWT to the mobile app which can be included on every REST API request. For example, this is something Approov。
同样重要的是不要将应用 强化(混淆、字符串加密等)与 REST API 保护 混淆:在前一种情况下,您会在移动应用程序中看到价值;在后一种情况下,您会在 REST API.
后面的 data 中看到值除非您有足够的资源,否则这是一个很难有效解决的问题,因此我建议您使用其他人已解决这些问题的解决方案,这样您就可以将精力集中在应用功能、用户体验和 time-to-market .
无论您决定如何,+1 积极主动地保护安全,希望这对您有所帮助,祝项目顺利!