如何更安全的 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 请求?的主要内容,如果未能解决你的问题,请参考以下文章