在移动应用程序中隐藏秘密
Hide a secret within a mobile app
我拥有一个移动应用程序并希望它使用我的网络 api。我计划使用 oauth2 用户凭据流程 (https://bshaffer.github.io/oauth2-server-php-docs/grant-types/user-credentials/)。
但是,我想对应用程序和用户凭据进行身份验证(我不希望任何其他应用程序或用户对我的 API 进行身份验证以供在此应用程序之外使用)。
我看到库指定了这个:
$ curl -u TestClient:TestSecret https://api.mysite.com/token -d 'grant_type=password&username=bshaffer&password=brent123'
这对我有用,但它假定下载的每个移动应用程序(public)都需要将 TestClient:TestSecret 预加载到应用程序中。
我如何确保这些信息不会从应用程序中提取出来,以允许人们使用来自另一个 app/system 等的用户凭据来调用我的 API?
如果它是预加载的,则不能。你只能增加工作因素,增加难度,减少成功的攻击者。
一种解决方案是让用户登录到您的服务器并在此时获取凭据并将它们存储在钥匙串中。关于 Dropbox 和类似应用程序如何处理此问题的事情。但即使在那里向用户保留凭据也是一个难题。
下一个问题是中间人 (MITM) 攻击,您需要在应用程序中固定证书以避免这种情况。
我拥有一个移动应用程序并希望它使用我的网络 api。我计划使用 oauth2 用户凭据流程 (https://bshaffer.github.io/oauth2-server-php-docs/grant-types/user-credentials/)。
但是,我想对应用程序和用户凭据进行身份验证(我不希望任何其他应用程序或用户对我的 API 进行身份验证以供在此应用程序之外使用)。
我看到库指定了这个:
$ curl -u TestClient:TestSecret https://api.mysite.com/token -d 'grant_type=password&username=bshaffer&password=brent123'
这对我有用,但它假定下载的每个移动应用程序(public)都需要将 TestClient:TestSecret 预加载到应用程序中。
我如何确保这些信息不会从应用程序中提取出来,以允许人们使用来自另一个 app/system 等的用户凭据来调用我的 API?
如果它是预加载的,则不能。你只能增加工作因素,增加难度,减少成功的攻击者。
一种解决方案是让用户登录到您的服务器并在此时获取凭据并将它们存储在钥匙串中。关于 Dropbox 和类似应用程序如何处理此问题的事情。但即使在那里向用户保留凭据也是一个难题。
下一个问题是中间人 (MITM) 攻击,您需要在应用程序中固定证书以避免这种情况。