重定向 URI 是否为本机移动应用程序的 OAuth 实现提供安全性?

Does Redirect URI provide security in OAuth implementation for native Mobile Application?

我正在 Android 上开发本机移动应用程序,它必须与具有 oAuth2.0 实现的服务器交互并使用 Google AppAuth 库,如 here 所述。

1) 除了将授权 code/Access 令牌返回给我们的应用程序之外,重定向 URI 的用途是什么。由于在授权请求中指定的重定向 URI 必须与在 Google API 控制台注册的相同,它是否也是一种确保控制仅返回到注册的应用程序的媒介google 而别处?

2) 由于我在我的移动应用程序中获取了访问令牌和刷新令牌并将其保存在移动设备中(如代码实验室示例所示),如果有人掌握了我的刷新令牌、客户端 ID 和重定向 URI。 有人可以在自己的设备上使用这些详细信息访问我的服务器吗?

  1. What is the purpose of Redirect URI other than getting Authorization code/Access token back to our application.

如您所说,大多数 IDP 使用与特定客户端 ID 关联的重定向 URI 白名单,以限制可以发送代码和令牌的位置,作为防止令牌盗窃的第一道防线。这适用于网络,其中 https 重定向 URI 至少提供了一些基本的防止欺骗的保护措施。

直到最近,https 重定向 URI 都不适合本机应用程序。 Android M 引入 App Links, which allow apps to claim https authorities in a way that cannot be hijacked by other malicious apps. An alternative technique, PKCE,提供稍弱的保护,但适用于任何 Android 版本。但是,PKCE 需要您的授权端点的支持。

  1. if somebody gets hold of my these details of refresh token [...] Can somebody access my server using these details on his own device ?

一般来说,是的。如果您的令牌泄露给另一个恶意应用程序,他们可以使用这些来访问这些令牌允许访问的数据。像这样的“不记名令牌”必须保密,通常只通过令牌发行者和令牌用户之间的加密连接传输它们。

有关 token channel binding 的标准工作正在进行中,其中令牌只能与生成并存储在设备上的硬件加密模块中的非对称密钥对结合使用。从这些模块中窃取私钥非常困难,比仅仅试图窃取令牌本身要困难得多。

我建议阅读 OAuth2 for Native Apps for an overview of the current best practices. To use OAuth2 in your app, I would recommend using the OpenID AppAuth 图书馆。免责声明:我是 AppAuth 的主要维护者。