- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 OAuth 世界的新手,我想了解使用 PKCE 相对于传统授权代码授予的好处。 (我的许多假设可能是错误的,所以我会感谢你的更正。)
我是一名移动应用程序开发人员,根据 OAuth 文档,客户端 secret 不能硬编码到公共(public)客户端的应用程序代码中。避免对客户端密码进行硬编码的原因是黑客可以反编译我的应用程序并获取我的客户端密码。
拥有我的客户端密码和我的 redirect_url 的黑客可以开发一个虚假的应用程序。如果最终用户 (User1) 下载真实应用程序和黑客的应用程序(两者),则虚假应用程序可以监听真实应用程序回调并从中获取授权代码。使用授权代码(来自回调)和客户端 secret (通过反编译我的应用程序窃取),黑客可以获得授权 token 和刷新 token ,并能够获取例如 User1 的数据。
如果其他用户下载真假应用程序,他们的数据也将处于危险之中。我对吗?黑客是否需要两者,或者他/她是否可以仅使用授权码进行攻击?图片第五步需要client secret和授权码吗?
这种攻击称为拦截攻击。
为解决公用客户端应用中客户端密码硬编码问题,使黑客无法获取客户端密码窃取token,PKCE应运而生。使用 PKCE,客户端应用程序代码不需要硬编码客户端密码,因为 PKCE 不需要该信息来获取最终用户的 token 。
PKCE 流程创建一个随机字符串,将其转换为 SHA-256哈希值和 Base64。在图像的第二个点中,该编码字符串与 client id 一起发送到身份验证服务器。然后在回调中发送授权代码,如果任何恶意应用程序拦截代码,它将无法获得 token ,因为图像的第五点需要合法应用程序创建的原始随机字符串。
这很好,但是如果不再需要客户端密码来获取访问 User1 数据的 token ,我如何才能避免黑客开发一个假的应用程序,该应用程序使用 PKCE 流和我的客户端 ID 并获取 token 认为该应用是合法应用的用户?
由于图像的第五步不再需要客户端 key 来获取 token ,任何人都可以使用我的公共(public)客户端 ID 开发假应用程序,如果任何用户下载假应用程序并执行 OAuth 流程,黑客可以获得其 token 并访问该用户数据!
我说得对吗?
最佳答案
if the client secret isn't need anymore to get the tokens to access User1 data, how can I avoid a hacker developing a fake App which use PKCE flow with my client id and getting the tokens of the users who think that app is the legitimate one?
OAuth 2.0 或 PKCE 无法防止“虚假应用”。
PKCE 确实可以防止设备上的恶意应用程序窃取用于另一个应用程序的 token 。例如。想想银行应用程序,如果设备上的另一个应用程序可以获得银行应用程序正在使用的 token ,那就不好了。这就是您的图片中说明的情况,PKCE 对此进行了缓解。
As the 5th step of the image don't need anymore the client secret to get the tokens, anyone could develop fake apps using my public client id.
移动应用程序无法保护客户端 secret ,类似于 JavaScript 单页应用程序。因此,根据 OAuth 2.0,这些客户端是公共(public)客户端,而不是 secret 客户端。只有 secret 客户才能以安全的方式保护客户 secret ,只有那些应该使用客户 secret 。 PKCE 是一种适用于公共(public)客户端 的好技术,但也可用于 secret 客户端。
if any user downloads the fake app and do the oauth flow, the hacker could get it's tokens and access that users data!
联系 Apple Store 或 Google Play 商店获取“虚假应用”,或使用例如反恶意软件应用程序。这就是针对“假应用程序”的缓解措施。 PKCE 仅缓解同一设备上的另一个应用程序试图窃取为另一个应用程序(例如银行应用程序)颁发的 token 的情况。
关于security - 了解 PKCE 与授权码授予的优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70767605/
请帮助我的建议。 我需要通过 xml 文件中的某个变量在我的应用程序上禁用/启用 spring 安全性。 我的 spring-security.xml 文件
我做了很多研究,对我来说一切看起来都是正确的......但我无法让它发挥作用!有人有什么想法吗? 无论我做什么,相关映射仍然对任何人公开(匿名或登录,无论他们具有什么角色)。 理想情况下,我希望所有请
我们正在考虑为我们网站的一部分启用 SSL,但某些页面包含来自第三方供应商(如 Google AdSense)的广告。 我认为这会给我们的用户带来一个恼人的问题,因为他们在查看带有广告的页面时会看到类
我正在开发一个休息服务,它将通过浏览器提供 浏览器单页应用程序和移动应用程序。目前我的服务正在运行 根本没有 Spring 。 oauth2 客户端是在过滤器内部实现的,所以可以说是“手动”。 我正在
我正在为我公司的网站添加 Content-Security-Policy-Report-Only 标题。在我研究它时,我发现一些页面已经设置了 Content-Security-Policy head
在 XML 配置中,我可以使用 security 命名空间来启用对安全性的支持,例如: 我尝试使用没有 XML 的 Spring,只有 @Configuration 类。与上述 XM
我正在使用 Spring Security 3.0.2,但找不到从数据库加载匿名用户角色的方法(我有动态角色,可以将角色分配给每个人)。 我尝试使用自定义的anonymousAuthenticatio
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
我正在使用SSH Secure Shell客户端,这是一个连接服务器的好工具。 但是,我想知道是否可以记录通过SSH Secure Shell客户端运行的程序中所有即将出现的消息。例如:./ test
我有那个代码。但是当我在浏览器中进入 app_dev.php/login浏览器说:该页面进行了太多重定向 安全.yml安全: 编码器: Symfony\Component\Security\Core\
如何为表单例份验证提供程序设置 success_handler(和 failure_handler)? Silex 使用此配置忽略我: register(new Silex\Provider\Secu
新手问题...我已成功实现自定义处理程序和服务(自定义用户详细信息服务、身份验证成功、身份验证失败)并且一切正常。我现在还实现了如果 3 次并发身份验证失败将锁定帐户(一定时间)的功能。 我现在继续处
我正在使用 Spring security java 配置,我想知道一种实现多个 url 注销的方法。即 logout().logoutRequestMatcher(new AntPathReques
我正在为我的 SP 使用 Spring Security SAML 扩展。用户通过 IDP 身份验证后,SP 使用某种方法允许后续调用不必通过 IDP 重新进行身份验证。这是如何在 Spring Se
spring security 有没有办法防止下面的最后一点?我正在使用 3.0.5 - 用户登录我的网站 - 用户转到网站中的任何页面并单击注销 -注销链接使用户 session 无效并将它们发送到
要么我迟到了,要么我做错了什么。我正在使用 Visual Studio 2013,但是我试图使用 Membership 类,using System.Web.Security;我的程序集中不存在命名空
我有一个具有依赖性的oauth2客户端spring-boot应用程序: - Spring 靴1.2.0.RC1 -spring-security-oauth2 2.0.4.RELEASE - Spri
我想在控制台应用程序中生成 HashPasswordForStoringInConfigFile。 它是在 Web 应用程序中使用以下类完成的 System.Web.Security.FormsAut
我需要有多个 PRE_AUTH Spring 安全过滤器。特别是我需要使用 PRE_AUTH除了配置为 PRE_AUTH 的两个过滤器之外的过滤器在 Spring Security 3.0 的 SAM
我猜这里没有答案,但我想知道是否有办法创建这样的自定义注释: @Documented @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({E
我是一名优秀的程序员,十分优秀!