gpt4 book ai didi

authentication - 适用于 Web 应用程序和移动应用程序的 REST API 身份验证

转载 作者:行者123 更新时间:2023-12-03 06:00:34 25 4
gpt4 key购买 nike

我在决定如何实现 RESTful API 的身份验证时遇到了一些困难,该 API 对于 Web 应用程序和移动应用程序的使用都是安全的。

首先,我想研究一下基于 HTTPS 的 HTTP 基本身份验证作为一种选择。它非常适合移动应用程序,其中用户名和密码可以安全地存储在操作系统钥匙串(keychain)中,并且不会在传输过程中被拦截,因为请求将通过 HTTPS 进行。对于 API 来说它也很优雅,因为它是完全无状态的。问题在于网络应用程序。无法访问这样的钥匙串(keychain)来存储用户名和密码,因此我需要使用 cookie 或 localStorage,但随后我会将用户的私有(private)详细信息存储在易于访问的位置。

经过更多研究,我发现很多关于 HMAC 身份验证的讨论。我发现这种方法的问题是需要有一个只有客户端和服务器知道的共享 secret 。除非我有一个 api/登录端点,它需要用户名/密码并将 secret 返回存储在 cookie 中,否则如何才能将每个用户的 secret 提供给 Web 应用程序中的特定用户?以在将来的请求中使用。然而,这正在向 API 引入状态。

为了将另一个 Spanner 投入到工作中,我希望能够将 API 限制为某些应用程序(或者,能够阻止某些应用程序使用 API)。我不明白如果网络应用程序完全公开,这怎么可能实现。

我真的不想实现 OAuth。这对于我的需求来说可能有点过分了。

我觉得我可能没有完全理解 HMAC,所以我欢迎您的解释以及如何使用网络应用程序和移动应用程序安全地实现它。

更新

我最终使用了 HTTP 基本身份验证,但是不是在每个请求中提供实际的用户名和密码,而是实现了一个端点来将用户名和密码交换为访问 key ,然后为每个经过身份验证的请求提供该访问 key 。消除了在浏览器中存储用户名和密码的问题,但当然,如果您有权访问计算机并使用它,您仍然可以取出 token 。事后看来,我可能会进一步研究 OAuth,但它对于初学者来说相当复杂。

最佳答案

您应该使用 OAuth2。方法如下:

1) 移动应用程序

您自己声明的移动应用商店客户端凭据。然后,它使用“资源所有者密码凭据授予”(请参阅​​ https://www.rfc-editor.org/rfc/rfc6749#section-4.3 )来发送这些凭据。反过来,它会获得一个(不记名) token ,可以在以下请求中使用。

2) 网站

网站使用“授权代码授予”(参见https://www.rfc-editor.org/rfc/rfc6749#section-4.1):

  1. 网站发现未经授权的请求,并将浏览器重定向到 REST API 中启用 HTML 的自动化端点。

  2. 用户使用 REST 服务进行身份验证

  3. REST 站点将用户重定向回 URL 中包含访问 token 的网站。

  4. 网站调用 REST 站点并将访问 token 交换为授权 token 。

在此之后,网站使用授权 token 来访问 REST 服务(代表最终用户) - 通常通过将 token 作为“承载” token 包含在 HTTP 授权 header 中来实现。

这不是火箭科学,但确实需要一些时间才能完全理解。

3) 限制某些应用程序的 API 访问

在 OAuth2 中,每个客户端都会获得一个客户端 ID 和客户端 key (此处“客户端”是您的移动应用程序或网站)。客户端在授权时必须发送这些凭据。您的 REST 服务可以使用它来验证调用客户端

关于authentication - 适用于 Web 应用程序和移动应用程序的 REST API 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21506843/

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