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

8
考虑以下常见情况。首先,我会尝试使用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。

你会怎样解决这个问题?特别是客户端流程对我来说是一个问题。我之所以问,是因为我已经阅读到除非绝对必要,否则不应自己组建安全解决方案,因此,如果有任何标准指南,请告诉我。 :)


你找到解决问题的方法了吗?因为我也在四处寻找,但迄今为止什么都没有。 - idipous
oauthbible.com可能有帮助吗? - John Sheehan
2个回答

3

请看新的Web API 2 OAuth内容。

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

然后,只需调用注册控制器即可。这将为您创建一个令牌,然后可以在该用户的每个请求的头部中发送该令牌。

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


我会去查看的!谢谢! - Jeff

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接