ios - iOS OAuth2 授权最佳实践
问题描述
我的 iOS 应用程序包含几个使用 OAuth2 授权的 API 集成。我看到很多在线建议不要在设备上存储客户端 ID、机密或令牌。但是,我不清楚其中有多少适用于 OAuth2。例如,clientId 是 Authorization 请求的查询参数。因此,任何用户都可以使用代理(例如 Charles)轻松拦截此值,因此我看不到隐藏此值的好处。我的理解是 ios 应用程序最重要的漏洞是另一个应用程序试图使用您的应用程序的自定义方案捕获重定向。但是如果我们使用Proof Key for Code Exchange (PKCE),恶意应用程序只能截获授权码,没有Code Verifier就无法将其交换为令牌。那么,使用 OAuth2 的 iOS 应用程序的最佳实践是什么?
解决方案
原生应用的 OAuth推荐 AppAuth 模式,其中有几个关键特征:
该应用程序使用系统浏览器的一种形式(ASWebAuthenticationSession 窗口),因此该应用程序永远无法访问用户的凭据
正如您所指出的,使用了授权代码流 (PKCE)。您可以通过使用 https:// 回调 URL 而不是自定义方案来进一步加强这一点,尽管它有点困难。
可以比较的东西
这是我的一些链接,您可以运行更多详细信息和示例,这可能会为您自己的解决方案提供一些想法:
推荐阅读
- javascript - 使用 javascript 中的 if 条件验证用户名和密码时,警报框无法正常工作
- android - Delphi 10.3 Android 意图广播接收器
- java - Dropwizard 的自定义 gRPC 命令立即退出
- javascript - 让输入字段显示空白而不是 [object Object] 或 {
- php - 紧凑():未定义的变量
- reactjs - 用对象数组反应状态:可以保持一些对象不变吗?
- .net - .Net 核心和插件
- c# - 有没有正当理由在非静态类中使用静态方法?
- java - 有没有办法“获取”一个属性而不是在 Xodus 中“找到”它?
- ios - 通过使用泛型将结构作为参数传递来关闭回调