Web API身份验证和授权(OAuth)

Jef*_*eff 8 security authentication rest oauth asp.net-web-api

请考虑以下(常见)方案.我将首先尝试使用OAuth指定我对(漂亮的)Web API的理解.如果我有任何错误的流程,请纠正我.

我的API:关注的焦点,所有客户都使用它.

我的Web应用程序:就像任何其他客户端一样使用API​​.

我的移动应用程序:也使用API​​,与Web应用程序完全相同.用户应该能够在不打开浏览器的情况下进行身份验证.

第三方Web App:也使用API​​ - 但是,用户/资源所有者必须授予应用程序执行某些操作的权限.他们通过重定向到我的站点(或打开一个弹出窗口),在必要时记录用户,并提示用户进行访问来完成此操作.

第三方移动应用程序:与第三方Web应用程序相同的要求.


问题

  • 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?
Run Code Online (Sandbox Code Playgroud)
  • 由于Web应用程序只是我的API的使用者,我将如何管理登录状态?网络应用程序应该这样做吗?
  • Web应用程序是否可以直接访问用户数据库,而不是根据API验证凭据?

我主要使用.NET(C#),但我喜欢一种适用于基于Node JS的API的方法.

你会怎么做?特别是客户流程对我来说是一个问题.我问的原因是,我已经知道除非绝对必要,否则你不应该推出自己的安全解决方案,所以如果有任何标准的准则,请告诉我.:)

CSh*_*Bee 3

看看新的 Web API 2 oAuth 内容。

基本上启动一个新的 Web API 项目并确保您选择更改身份验证。

然后,这是调用注册控制器的简单情况。然后,这会为您创建一个令牌,然后可以在该用户的每个请求的标头中发送该令牌。

使用 fiddler 检查 API 调用并创建一些模拟帐户。