【问题标题】:Protect OAuth2 code exchange API endpoint保护 OAuth2 代码交换 API 端点
【发布时间】:2021-07-20 22:52:06
【问题描述】:

假设我有一个带有 Reddit OAuth2 身份验证的 android 应用程序。我使用我的客户 ID 发起授权请求,并且用户接受同意。现在我得到了授权码,它将通过 HTTP 请求在我的服务器中交换为令牌。此过程将保护我的客户端机密,因为它在我的服务器中,但实际上并没有。任何人都可以通过反编译从应用程序中获取客户端 ID,并向 reddit 发起授权请求,并从我的服务器交换代码以获取令牌。他们甚至不需要知道秘密来获得令牌。

如何保护 API 免受此类滥用(或攻击?)?

有什么方法可以让我的 API 只接受来自我的应用程序的请求并拒绝其他请求(使用 SHA256 等)?

我查阅并研究了 PKCE。但这在这种情况下没有用,因为它只能再次保护代码嗅探/拦截并且只接受原始授权请求发起者。

【问题讨论】:

    标签: rest security authentication oauth-2.0 jwt


    【解决方案1】:

    您可能想要store a secret。首次打开应用程序时(并在一定时间间隔后确保其安全),您需要生成一个密钥对。将私钥存储在设备的 Keystore 中,并将公钥发送到您的后端。在对您的 api 进行身份验证时,使用私钥对客户端的密钥进行签名,并使用后端的公钥对其进行验证。

    请注意,这会给您的登录过程带来大量开销。因为移动设备不一定具备执行加密的能力。虽然这越来越不真实了。

    编辑:您的密钥对需要由您信任的 CA 颁发,否则这一切都没用。

    【讨论】:

    • 谢谢,我将对您的方法进行一些研究,并尝试掌握这里发生的情况。
    • 能否请您提供一些关于此主题的资源(如博客、文章或文档)。老实说,我什至不知道从哪里开始。
    • 网络安全是一个庞大的话题,无法在评论或帖子中简化。您需要做的基本上是签署一个秘密。这里有一些很好的资源:@​​987654322@ssd.eff.org/en/module/…stackoverflow.com/questions/37722090/…你永远不应该尝试实现与加密或签名相关的任何事情。使用经过验证的成熟库。
    猜你喜欢
    • 2019-02-20
    • 2020-11-30
    • 2018-09-21
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2016-11-12
    相关资源
    最近更新 更多