【问题标题】:Security Issue Related to OAuth Flow与 OAuth 流相关的安全问题
【发布时间】:2017-04-12 09:45:40
【问题描述】:

此问题与本机移动应用程序中基于 OAuth 的登录有关。根据授权授予类型流程,用户在登录页面中输入用户 ID、密码,作为响应,在 URL 中获取授权码(由于其 URL,基于 https 的加密也不起作用)。

这意味着授权代码在代理中可用,任何人都可以使用它,只要他们也有客户端密码。客户端密码不能存储在移动应用程序中,因为移动应用程序也不被认为是安全的。我想到的绕过客户端密码安全性的方法是提供一个服务器端端点,移动客户端可以在其中调用客户端 ID、授权码和重定向 url。端点将丰富客户端密钥,然后调用实际令牌端点来获取访问令牌。访问令牌是安全的,因为整个通信都是通过 HTTPS 进行的。

现在的问题是 - URL 参数中的授权代码不安全且易受攻击。还是我对安全性考虑过度了。这是首要问题,如果这确实是一个安全问题,采取的缓解措施是什么?

我可以从一个较旧的 stackoverflow 线程中想到的一个选项是保护令牌端点,该端点将从服务器端提供访问令牌。关于如何做到这一点的任何建议? - 如果是它的证书,那么证书将被打包在移动应用程序中,使其再次变得不安全)

【问题讨论】:

    标签: security oauth oauth-2.0


    【解决方案1】:

    无耻的插件...但是由于我阅读了完整的规范并进行了一些离线讨论,因此我想提供我的看法。

    一个。客户端和授权服务器之间的 TLS - 当在授权提供程序内进行几次重定向后完成完整的身份验证时,授权提供程序将位置标头设置为重定向 uri,以及位置标头中查询参数中的授权代码。由于授权码在位置标头中,并且响应标头仍受 TLS 保护,因此窃听不会暴露授权码。

    b.如果客户端是移动应用程序 - 重定向 uri 应指向自定义 URI 方案,该方案将指向移动应用程序本身。所以当浏览器执行基于位置头的重定向时,浏览器会调用移动应用程序。呼叫不会离开设备,因此授权代码不会暴露给外界。

    c。如果客户端是 Web 应用程序 - 重定向 uri 将在浏览器上执行,并且授权代码将暴露在代理日志中(在 https 卸载之后)和浏览器缓存中,或者如果存在重定向,它将很容易受到代码泄露。授权码的保护有两种方式 - a.授权码可以设置一个生命周期,这个生命周期可以很小。湾。授权码只能使用一次。因此,如果实际客户端已经使用它,则没有人可以重用验证码来再次获取访问令牌。

    d。基于 Kris 在下面的 cmets 中提到的观点,该规范定义了一种保护授权码滥用的方法。如果代码被多次使用,授权服务器可以撤销所有使用授权代码创建的访问令牌。

    【讨论】:

    • d.来自the specification:当请求的响应类型是“代码”或“令牌”时,重定向端点应该要求使用第 1.6 节中描述的 TLS,或者当重定向请求将导致通过开放网络传输敏感凭据时.
    • @Kris - 同意重定向端点使用 TLS,但授权码是 HTTP 查询参数的一部分,无法受 TLS 保护。
    • 这取决于您所说的“受保护”是什么意思。当然,它可能会由您的 Web 服务器记录,如果终止 TLS,也可能由代理记录。但是网络上的窃听者是看不到的。
    • 此外,正如您自己指出的那样,the specification 声明“如果多次使用授权代码,授权服务器必须拒绝该请求并应该(如果可能)撤销之前基于在那个授权码上。”由于客户端将在收到代码后立即将其交换为令牌,因此要么它是唯一拥有来自代码的访问令牌的人,要么没有人拥有。
    • 确实,这是一场比赛。我考虑第二点,如果有人尝试使用相同的授权码获取访问令牌,授权服务器应该撤销所有由授权码颁发的访问令牌。这将符合目的。感谢您指出。
    猜你喜欢
    • 2022-07-19
    • 1970-01-01
    • 2020-08-31
    • 2023-03-25
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-08
    相关资源
    最近更新 更多