如何更安全的 OAuth2 请求?

Posted

技术标签:

【中文标题】如何更安全的 OAuth2 请求?【英文标题】:How to more secure OAuth2 Request? 【发布时间】:2018-06-17 04:43:19 【问题描述】:

我正在尝试使用 OAuth2 来保护我的 API 服务。在下面的方案中,向 OAuth 服务器发出电话请求,我在我的 API 服务器和客户端之间使用 SSL 固定,但我不确定它是否可以在中间攻击中通过 main 暴露;

1-) 攻击者可以通过 MIMA 获取 OAuth url,例如攻击 DDOS?

2-) 攻击者能否访问 ios 上的钥匙串并获取 JWT?

3-) 攻击者可以通过 MIMA 或反向工程师获得证书吗?这样 SSL pinning 就变得不安全了?

【问题讨论】:

SSL pinning 降低了受到 MITM 攻击的风险。但是你没有使用 oauth2 和 oauth2 它与 MITM 或 SSL pining 无关,所以试着澄清你的问题。 我改变了我的问题。你能检查一下吗? @pedrofb 【参考方案1】:

我正在尝试使用 OAuth2 保护我的 API 服务。

首先,您的方案不符合 OAuth2 流程。见RFC6749。

API服务器应该扮演两个角色(理论上不一定是两个服务器)

授权服务器:对客户端进行身份验证并颁发访问令牌 资源服务器:需要提供有效访问令牌的受保护资源

应用不会直接向用户询问用户名/密码。该请求是由授权服务器使用 Web 重定向发出的,因此客户端应用程序永远不会请求用户的凭据。

1-) 攻击者可以通过 MIMA 获取 OAuth url,例如攻击 DDOS?**

Oauth2 URL 可以是公开的。这不是问题

2-) 攻击者能否访问 iOS 上的钥匙串并获取 JWT?

不,它受操作系统保护

3-) 攻击者可以通过 MIMA 或逆向工程师获得证书吗?这样 SSL pinning 就变得不安全了?

固定证书是公开的,通常由证书颁发机构发布。它是客户端在建立 SSL 连接时接受的一组简化的 CA 根证书。攻击者无法出示此 CA 的有效证书,因为他不拥有私钥,因此无法进行 MITM 攻击。


免责声明:Oauth2 主要用于 Web 应用程序。如果您使用本机应用程序,我建议使用 OpenIdConnect,它是 OAuth2 的扩展,以避免密集使用或 Web 重定向

【讨论】:

但是我将把这个系统用于我的应用程序登录页面,而不是用于第 3 方应用程序。我怎么能不直接询问用户名或密码?您能否更详细地解释一下:) 我正在考虑获取用户名+密码并使用密钥对其进行编码并在 Oauth2 服务器中对其进行解码。 @pedrofb 我觉得不需要使用OAuth2?在我的情况下,仅 JWT 看起来就足够了吗? oauth2 适用于向第三方提供服务/API,或者希望根据标准集中对应用程序进行身份验证的情况。看来这不是你的情况,所以更简单的解决方案可能更合适 是否可以通过密钥发送加密的用户名+密码并在服务器上解密并返回JWT如果它是真的然后在客户端检查JWT? 发送加密或明文密码的安全级别是相同的,因为如果 MITM 攻击者捕获它,他可以进行身份​​验证。但是您说您使用的是 SSL pinning,因此该通道已加密并防止 MITM,因此您不需要额外加密

以上是关于如何更安全的 OAuth2 请求?的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2 资源服务器不验证请求

通过反向代理注入 OAuth2 令牌

OWIN 安全 - 如何实现 OAuth2 刷新令牌

如何安全地存储 Discord(OAuth2) 用户的访问令牌?

如何实际使用使用不和谐 oauth2 请求的数据

如何在 Javascript 中实现安全的 OAuth2 消费?