gpt4 book ai didi

asp.net-web-api - ASP 身份 OAuth token - 我应该在移动应用程序流中使用 ValidateClientAuthentication() 和 Secret 吗?

转载 作者:行者123 更新时间:2023-12-04 20:39:22 25 4
gpt4 key购买 nike

我有一个与后端的 ASP WebAPI 对话的移动应用程序。
我已经实现了 token 流身份验证(在 Taiseer's guide 的帮助下)。

仍然有一个概念我无法理解:客户 ID 客户 secret .

据我了解,客户端 secret (连同客户端 ID)旨在
阻止访问我的 API 中产生 token 的端点。这样,端点就可以防止恶意用户试图绕过 API 并尝试通过使用各种输入调用它来获取一些信息。

这意味着,只有持有 secret 的客户端才能启动身份验证流程。就我而言,我只有一个客户端,它是一个移动应用程序,它的 secret 存储在一个安全的地方(用于 iOs 的 KeyChain)。但我读过这些 key 链很容易被倾倒并剖析 secret 。

所以我得出的结论是,我可以摆脱整个客户端 secret 逻辑,主要是将 ValidateClientAuthentication() 留空:

public async override Task ValidateClientAuthentication(OAuthValidateClientAuthenticationContext context)
{

context.Validated();
return;
}

对我来说,它看起来不像是一个安全漏洞,而只是流中的一个薄层,现在已经消失了。因为,再次,任何持有安装了应用程序的移动设备的恶意用户都可以轻松地泄露客户端 secret ,一旦他得到它,这层安全层就没有用了。

这些假设不正确吗?

我可以将 ValidateClientAuthentication() 方法留空吗?

最佳答案

正如您已经发现的那样,移动应用程序无法将其凭据保密,因为它们可以从应用程序二进制文件中提取。更不用说使用代理服务器和 Fiddler 或 Wireshark 等流量分析器可以轻松拦截请求。
使用授权代码流 (1) 或资源所有者密码凭据授予,如果客户端不能安全地存储其凭据并因此不能被视为“ secret ”应用程序,则客户端身份验证不是强制性的(参见 https://www.rfc-editor.org/rfc/rfc6749#section-4.1.3https://www.rfc-editor.org/rfc/rfc6749#section-4.3.2) .
对于非 secret 应用,请调用 context.Validated() .
就个人而言,我尽量避免授予资源所有者密码凭据,因为这显然违背了 OAuth2 的目的:保持密码 secret 并给予受限授权。不过,如果您的应用程序是完全受信任的,那应该不是问题。

  • 在实践中,使用授权代码流而不强制客户端身份验证极为罕见,因为在移动客户端应用程序中使用隐式流更简单,在这种情况下提供类似的安全级别(更不用说它避免了第二次往返 token 端点)。
  • 关于asp.net-web-api - ASP 身份 OAuth token - 我应该在移动应用程序流中使用 ValidateClientAuthentication() 和 Secret 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29578844/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com