Web Api 2 OData端点中的简单Web令牌(SWT)身份验证

时间:2013-12-05 11:17:30

标签: asp.net-web-api odata

好的,情况就是这样。

我们已经拥有一个现有的ASP.NET MVC 5站点,其中包含自定义表单身份验证,登录,注册等,以及已实现的角色和配置文件的自定义数据库。

我们现在正在为MVC网站添加一些新功能,我们决定使用另一个域中的Web Api 2 OData 3端点。 Web Api目前不包含任何身份验证,但我们需要能够将请求映射到特定用户以从后端获取其角色等。 MVC和API站点使用相同的后端。

我们希望实现的是,当用户登录MVC站点时,MVC站点使用用户的凭据调用Web Api服务器到服务器,并接收客户端可用于调用的令牌使用。

的网络服务

当API收到带有令牌的请求时,它可以将请求与后端用户映射并进行授权。

据我了解,Simple Web Token(SWT)可以完成它。但考虑到Azure Web角色中的实体框架的.NET 4.5.1 / Web Api 2 / OData 3环境,我开始考虑这个SWT应该真正使用的东西,或者是否有最近发布的任何新技术可以轻松地将其拉出来通过。如果.NET堆栈已经包含类似的内容,我不想在项目中添加任何不必要的第三方依赖项。

那么,在不向项目添加不必要的依赖项的情况下,通过这种方式进行此类身份验证的最简单方法是什么。

我们正在寻找的解决方案只是暂时的,同时我们重新设计了我们的身份验证方案。因此,我们正在寻找一些非常简单的实现方法,这些方法适用于需要在以后删除的最少依赖项。

1 个答案:

答案 0 :(得分:2)

我正在我正在进行的项目中使用它。我使用随Web API 2.0提供的OAuth 2.0 OWIN Middleware组件(如果添加启用了Authentication的新Web API项目,则它包含基础结构)。

您将使用OAuth 2.0规范中定义的资源所有者密码流。基本上,您从Web API OWIN Middleware发送请求令牌:

  • client_id - 标识您的MVC端点
  • client_secret - 标识您的MVC端点
  • 用户名
  • 密码

作为回应,您将获得持票人令牌。令牌生成基于声明主体,OAuth中间件组件具有用于添加声明的预定义挂钩。现在需要将此令牌作为授权标头添加到每个响应中。在MVC端,您可以将其添加到会话中,以便始终可以在与传入HTTP请求关联的用户的上下文中进行后端API调用。如果您正在使用WCF数据服务客户端,则需要一个可以挂接到OnRequestSending和OnResponseReceived事件的授权服务/管理器或类似服务器,以便您可以将该承载令牌插入HTTP头中。

您可以根据需要轻松自定义OAuth Middleware组件,因为它没有太多文档记录需要花费一些时间来解决它,但是下载Katana源代码确实有点帮助,因为源代码确实有一些很好的文档。

关于这一切的好处是你只需要启用HostAuthenticationFilter并在Web API端添加Authorize属性就可以了。您可以访问声明主体对象并使用声明来识别用户的信息 - 例如身份,角色,其他属性等。

要开始使用,请查看http://www.asp.net/vnext/overview/authentication/individual-accounts-in-aspnet-web-api

同样作为包装,我确实考虑使用JSON Web令牌(JWT),因为有一个OWIN库可用于生成和解析这些。这里的用例是您进行身份验证,获取JWT,然后使用JWT获取OAuth 2.0持有者令牌。如果要在其他位置移动身份验证,或者如果要在MVC端获取有关用户的其他信息,则JWT非常有用。