【发布时间】:2017-11-16 14:36:55
【问题描述】:
我正在开发一个通过 OAuth2 和 Spring 保护的 REST API,它将在 Android 应用程序(客户端)中使用。为了访问我的 API 的任何端点,需要 OAuth2 访问令牌并通过 Authorization Header 以类似于以下方式移交给端点:
“授权”-“这里的承载访问令牌”
为了获取访问令牌,必须提供用户名和密码,以及客户端 ID 和客户端密码(它们代表 Android 应用)。 clientID 和 client secret 以类似这样的方式通过 Authorization Header 交给 token 端点,由 Spring 指定:
“授权”-“基本 clientId:clientSecret”
如果客户端 ID 和客户端密码与服务器上定义的客户端匹配,并且如果用户存在且密码正确,则返回访问令牌和刷新令牌。
现在我的问题是如何将我的 clientId 和客户端密码安全地存储在 Android 应用程序中,以确保对我的应用程序进行逆向工程的人无法访问它们?
另外,如果我要开发 iOS 应用程序(第二个客户端),使用与安全 POV 不同的 clientID 和客户端密码是否明智?
【问题讨论】:
-
您的客户端是公共客户端,不需要客户端密码,因为您无法隐藏密码。另请参阅:stackoverflow.com/a/43391526/5277820 和 stackoverflow.com/questions/44044528/…。
标签: android spring security spring-security oauth-2.0