我正在Android上开发一个本机移动应用程序,它必须与oAuth2.0实现的服务器交互,并使用Google AppAuth库,如here所述。
1)除了将授权代码/访问令牌返回给我们的应用程序之外,重定向URI的目的是什么。由于要在授权请求中指定的重定向URI必须与使用Google API控制台注册的重定向URI相同,它是否也是一种安全媒介,控制权仅返回到在谷歌注册的应用程序而不是其他地方?
2)因为我在移动应用程序中获取了访问令牌和刷新令牌并将其保存在移动设备中(如代码示例中所示),如果有人掌握了刷新令牌,客户端ID和重定向URI的这些细节,该怎么办? 。 有人可以在自己的设备上使用这些详细信息访问我的服务器吗?
答案 0 :(得分:2)
1)除了将授权代码/访问令牌返回给我们的应用程序之外,重定向URI的目的是什么。
正如您所说,大多数IDP使用与特定客户端ID关联的重定向URI白名单,以限制代码和令牌的发送位置,作为防止令牌盗窃的第一道防线。这适用于Web,其中https重定向URI至少提供了一些防止欺骗的基本安全措施。
直到最近,https重定向URI才适合本机应用程序。 Android M引入了App Links,允许应用以不会被其他恶意应用程序劫持的方式声明https权限。另一种技术PKCE提供稍微弱一些的保护,但适用于任何Android版本。但是,PKCE需要您的授权端点的支持。
2)如果有人掌握了我刷新令牌的这些细节[...]有人可以在他自己的设备上使用这些细节访问我的服务器吗?
一般来说,是的。如果您的令牌泄露给另一个恶意应用程序,他们可以使用这些来访问令牌允许访问的数据。 "持票人代币"像这些必须保密,通常只通过令牌发行者和令牌用户之间的加密连接传输它们。
token channel binding上的标准工作正在进行中,其中令牌只能与生成并存储在设备上的硬件加密模块中的非对称密钥对结合使用。从这些模块中窃取私钥非常困难,而不仅仅是试图窃取令牌本身。
我建议您阅读OAuth2 for Native Apps,了解当前的最佳做法。要在您的应用中使用OAuth2,我建议您使用OpenID AppAuth库。免责声明:我是AppAuth的主要维护者。