考虑以下(常见)场景。我将首先尝试使用 OAuth 指定我如何理解(好的)Web API 应该是什么样子。如果我有任何流程错误,请纠正我。
我的 API:关注的中心,所有客户都使用它。
我的 Web 应用程序:像任何其他客户端一样使用 API。
我的移动应用程序:也使用 API,与 Web 应用程序完全相同。用户应该能够在不打开浏览器的情况下进行身份验证。
第 3 方 Web 应用程序:也使用 API - 但是,用户/资源所有者必须授予应用程序执行某些操作的权限。他们通过重定向到我的站点(或打开它的弹出窗口)、在必要时登录用户并提示用户访问来做到这一点。
第 3 方移动应用程序:与第 3 方网络应用程序的要求相同。
问题
- API 是否应该处理身份验证和授权?
- API 如何知道谁(使用客户端应用程序的资源所有者)正在使用 API?
- 当用户使用我的官方客户时,他们显然不必授予任何权限——我的客户应该拥有所有权限。调用 API 时如何区分我的官方客户端和第三方客户端?
这是我所理解的,并且到目前为止会这样做。这是我真正需要帮助的地方——把这件事做好。
官方网络应用
- Client attempts to `GET /api/tasks/".
- API says "who are you? (HTTP 401)
- Official web app redirects to login form.
> Bob enters his credentials.
- .. now what? Get an authentication token? Cookie?
- 由于网络应用程序只是我的 API 的消费者,我将如何管理登录状态?Web 应用程序应该这样做吗?
- Web 应用程序是否应该直接访问用户数据库,而不是根据 API 验证凭据?
我主要使用 .NET (C#),但我喜欢一种适用于例如基于 Node JS 的 API 的方法。
你会怎么做?特别是客户流量对我来说是个问题。我问的原因是,我已经读到除非绝对必要,否则您不应该推出自己的安全解决方案,所以如果有任何标准指南,请告诉我。:)