java-如何保护从OAuth受保护资源中提取数据的Android应用安全

java-如何保护从OAuth受保护资源中提取数据的Android应用安全,第1张

概述我的公司正在构建一个RESTfulAPI,该API将返回中等敏感的信息(即财务信息,但不返回帐号).我可以控制RESTfulAPI代码/服务器,还可以构建Android应用.我已将API设置为将OAuth2与授权代码授予流程一起使用(带有客户端ID和密码),并且由于我们同时拥有客户端和提供者,因此我自动批准用

我的公司正在构建一个RESTful API,该API将返回中等敏感的信息(即财务信息,但不返回帐号).我可以控制RESTful API代码/服务器,还可以构建Android应用.我已将API设置为将OAuth 2与授权代码授予流程一起使用(带有客户端ID和密码),并且由于我们同时拥有客户端和提供者,因此我自动批准用户而无需批准客户端.当用户登录以检索令牌时,我们将CAS用于SSO,并将其用于授权服务器,作为OAuth 2流程的一部分.

我正在考虑各种方法来保护AndroID应用程序上的数据.我已经得出结论,绝对不会在设备上存储客户端ID和机密信息,但是我认为存储auth令牌可能行得通,因为这仅对单个用户构成风险(并且仅当他们碰巧拥有有根电话).

这是我想到的两个选择.它们都要求我拥有一种受CAS保护的代理服务器,与API服务器进行交互,并返回auth令牌.这样就无需在应用程序代码中存储客户端ID和密码.

这是我想出的:

1)每次启动应用程序时,要求用户输入密码才能访问数据.这绝对是最简单的方法.如果完成了此 *** 作,为了方便起见,我可能希望保存userID,但在这种情况下,将无法使用CAS登录名(因为它是基于Web的).我也许可以在后端使用无头浏览器将用户登录到CAS,并根据他们在AndroID表单中输入的内容来检索令牌,但这似乎很不明智.保存用户ID类似于Chase应用程序的 *** 作(如果您碰巧使用了此应用程序)-保存用户ID,但不保存会话之间的密码.

2)将auth令牌存储在AndroID设备上.这不太安全,但是几乎是万无一失的.当用户首次启动该应用程序时,请打开网页,返回返回令牌的代理服务器的CAS登录名(类似于https://developers.google.com/accounts/docs/MobileApps).用户登录并将令牌返回给应用程序后,对其进行加密并将其私有存储给应用程序.另外,使用ProGuard混淆代码,使加密算法更难以反向工程.我也可以进行令牌刷新,但是我认为这更像是一种错误的安全感.

3)不要使用CAS,而是想出另一种方式来获取服务的身份验证令牌.

关于其他人如何实现类似方案的任何建议(如果已完成)?

谢谢.

解决方法:

之所以开发像OAuth这样的标准,是因为并非每个人都必须一次又一次地重新思考相同的攻击媒介.因此,最常见的选择是坚持使用已有的东西而不是烘烤自己的东西.

无法秘密存储数据的客户端的第一个问题是,某些攻击者可能会访问用户的数据.由于从技术上讲不可能防止这种情况发生(代码混淆不会帮助您防御专家攻击者),因此OAuth 2 typically expires中的访问令牌会在很短的时间内出现,并且不会赋予攻击者完全访问权限(受范围限制).当然,您不应该在此类设备上存储任何刷新令牌.

第二个问题是client impersonation.攻击者可能会窃取您的客户端秘密并通过自己的(可能是恶意的)应用程序访问您的API.用户仍然必须亲自登录那里.那里的OAuth草案要求服务器竭尽所能防止这种情况的发生,但这确实很难.

The authorization server MUST authenticate the clIEnt whenever possible. If the authorization server cannot authenticate the clIEnt due to the clIEnt’s nature, the authorization server MUST require the registration of any redirection URI used for receiving authorization responses, and SHOulD utilize other means to protect resource owners from such potentially malicIoUs clIEnts. For example, the authorization server can engage the resource owner to assist in IDentifying the clIEnt and its origin.

我认为Google是第一个尝试通过检查应用程序签名来在这种设备上对客户端进行身份验证的方法的,但是它们还没有准备就绪.如果您想进一步了解该方法,请参见my answer here.

目前,最好的选择是保持OAuth方式,即在设备上将访问令牌,客户端ID和客户端保密(在使用授权码授予流程时),并配置服务器以进行其他检查.如果您对混淆这些内容感到更安全,请执行此 *** 作,但请始终将其视为公开提供这些值.

总结

以上是内存溢出为你收集整理的java-如何保护从OAuth受保护资源中提取数据的Android应用安全全部内容,希望文章能够帮你解决java-如何保护从OAuth受保护资源中提取数据的Android应用安全所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1085698.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存