考虑以下常见情况。首先,我会尝试使用OAuth来指定我对(好的)Web API的理解。如果我的流程有错误,请纠正我。
我的API:所有客户端都使用此API。
我的Web应用程序:与任何其他客户端一样使用API。
我的移动应用程序:也使用API,方式与Web应用程序完全相同。用户应该能够在不打开浏览器的情况下进行身份验证。
第三方Web应用程序:也使用API - 但是,用户/资源所有者必须授予权限才能执行某些操作。他们通过重定向到我的站点(或打开弹出窗口),必要时登录用户,并提示用户访问来完成此操作。
第三方移动应用程序:与第三方Web应用程序具有相同的要求。
问题
- API是否应处理身份验证和授权?
- API如何知道谁(即正在使用客户端应用程序的资源所有者)正在使用API?
- 当用户使用我的官方客户端时,他们显然不需要授予任何权限 - 我的客户端应拥有所有权限。在调用API时,我应该如何区分我的官方客户端和第三方客户端?
这是我到目前为止的理解和做法。在此,我真的需要帮助 - 正确地完成这项工作。
官方Web应用程序
- 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?
- 由于Web应用程序只是我的API的消费者,我如何管理已登录状态?Web应用程序应该这样做吗?
- Web应用程序直接访问用户数据库而不是对API进行凭据验证,是否可行?
我主要使用.NET(C#),但我希望能够适用于基于Node JS的API。
你会怎样解决这个问题?特别是客户端流程对我来说是一个问题。我之所以问,是因为我已经阅读到除非绝对必要,否则不应自己组建安全解决方案,因此,如果有任何标准指南,请告诉我。 :)