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

时间:2013-10-21 17:07:32

标签: security rest authentication oauth asp.net-web-api

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

我的API :关注的焦点,所有客户都使用此功能。

我的网络应用:就像任何其他客户端一样使用API​​。

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

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

第三方移动应用:与第三方网络应用相同的要求。


问题

  • 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应用程序是否可以直接访问用户数据库,而不是根据API验证凭据?

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

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

2 个答案:

答案 0 :(得分:3)

看一下新的web API 2 oAuth的东西。

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

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

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

答案 1 :(得分:0)

已经有一段时间了,但我想我会记录下我最后做的事情。

我使用DotNetOpenAuth。我有一个带有客户端的数据库,它们有一个Trusted字段 - 如果设置了这个字段,它会让客户端使用密码授予,这会自动授予为该客户端预定义的所有范围。

第一方网络应用使用普通的Cookie身份验证 - 在JS中暴露客户端凭据风险太大。