authentication - 主要的第一方移动应用程序如何确保其登录流程只能在其应用程序内完成?
问题描述
我正在学习 OAuth2 并阅读四种不同的授权类型,但我很难看到如何将这些流程之一用于您不想打开本机浏览器的第一方移动本机应用程序。
在资助类型中:
隐式授权 - 不实用,因为您无法获得刷新令牌,并且您无法确保只有您的应用程序或授权客户端才能获得访问令牌。
资源所有者密码流程 - 您无法确保只有您的应用程序或授权客户端才能获得访问令牌。
客户端凭据授予 - 与此用例无关。
这留下了授权码授予。但是,您不能使用客户端密码,因此您必须将其排除在外。
这使得该流程类似于隐式流程,但现在授权服务器可以使用重定向 URI 白名单进行某种类型的客户端身份验证,并且应用程序获取刷新令牌。
看起来您可以向移动操作系统注册 URI 方案,该方案可用作重定向 URI,以在身份验证重定向上打开您的应用程序。这样做的问题是非法应用程序可以欺骗响应您的应用程序 URL 方案。
添加 PKCE 似乎可以确保只有启动流程的应用程序才能使用从授权服务器返回的授权代码。我不确定这与使用传递给授权端点的状态令牌有何不同。
这些似乎依赖于相信用户只会从正确的应用程序开始他们的登录流程?
您现在还可以对重定向 URI 使用通用链接,以确保只有您的应用程序可以处理重定向。这是否消除了对 PKCE 的需要?
即使使用这些方案,您也必须通过设备上的外部用户代理来完成身份验证流程。
来自 Facebook、Twitter、Instagram 和 Google 的大多数主要第一方应用程序不使用浏览器让您登录。您直接在他们的应用程序中输入您的凭据。
该RFC 规定本机应用程序应使用外部用户代理(浏览器)来完成身份验证流程。
这对我来说很有意义,因为不应认为移动原生应用程序能够存储客户端密码。
那么这些主要应用程序如何确保只有您的第一方应用程序可以具有嵌入式登录而其他所有人都必须使用 OAuth 流程的登录流程?
解决方案
推荐阅读
- java - @Configuration 中的逻辑
- selenium - 等到方法在超时后不抛出异常
- php - PHP在MVC中渲染多维数组
- eclipse-plugin - 在具有特性的 Eclipse 启动配置中设置捆绑启动级别
- pandas - 根据另一个数据框中的日期条件创建新列
- salt-stack - 如何将多个命令传递到 salt cmd.run?
- javascript - __ 应该只适用于咖喱函数吗?为什么它在这里工作?
- algorithm - 查找嵌套循环的复杂性
- java - Common Pojo - 基于父 pojo 的动态错误消息 - Spring 验证
- ios - iOS13:UINavigationBar 在拉动以显示 UISearchController searchBar 时变得透明