2013-10-21 124 views
8

请考虑以下(常见)方案。我将首先尝试使用OAuth指定我理解(好)Web API的样子。如果我有任何错误的流量,请纠正我。Web API认证和授权(OAuth)

我的API:关注的中心,所有的客户都使用它。

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

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

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

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


的问题(一个或多个)

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

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

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

+0

您是否找到解决您的问题的方法,因为我目前正在寻找一个最好的和最低的寻找解决方案。 – idipous

+0

不,可悲的是.. – Jeff

+0

oauthbible.com可能有帮助吗? –

回答

3

看看新的Web API 2 oAuth的东西。

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

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

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

+0

我会检查出来的!谢谢! – Jeff

0

已经有一段时间了,但我想我会记录我最终做了什么。

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

第一方Web应用程序使用普通Cookie身份验证 - 在JS中公开客户端凭据会太冒险。