Asp.net web api Web Api 2 OData端点中的简单Web令牌(SWT)身份验证

Asp.net web api Web Api 2 OData端点中的简单Web令牌(SWT)身份验证,asp.net-web-api,odata,Asp.net Web Api,Odata,好的,情况是这样的 我们已经有了一个现有的ASP.NET MVC 5站点,该站点具有自定义表单身份验证、登录、注册等功能,并且已经实现了角色和配置文件的自定义数据库 我们现在正在向MVC站点添加一些新功能,并决定使用位于另一个域中的Web Api 2 OData 3端点。Web Api目前不包括任何身份验证,但我们需要能够将请求映射到某个用户,以便从后端获取他的角色等。MVC和API站点使用相同的后端 我们希望实现的是,当用户登录到MVC站点时,MVC站点使用用户的凭据调用Web Api服务器到

好的,情况是这样的

我们已经有了一个现有的ASP.NET MVC 5站点,该站点具有自定义表单身份验证、登录、注册等功能,并且已经实现了角色和配置文件的自定义数据库

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

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

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

据我所知,简单网络令牌(SWT)可以解决这个问题。但考虑到环境,.NET 4.5.1/Web Api 2/OData 3在Azure Web角色中具有实体框架,我开始思考这是我真正应该使用的SWT,还是最近发布的任何新技术可以轻松解决这一问题。如果.NET堆栈已经包含类似的内容,我不想向项目中添加任何不必要的第三方依赖项

那么,在不向项目添加不必要的依赖项的情况下完成此类身份验证的最简单方法是什么呢。


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

我正在我目前正在进行的一个项目中使用它。我使用Web API 2.0附带的OAuth 2.0 OWIN中间件组件(如果您添加一个启用了身份验证的新Web API项目,它包括基本基础设施)

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

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

您可以根据需要非常轻松地定制OAuth中间件组件,这需要花费一些时间来理解,因为它没有太好的文档记录,但是下载Katana源代码确实有帮助,因为源代码确实有一些很好的文档

这一切的好处在于,您只需在Web API端启用HostAuthenticationFilter并添加Authorization属性,就可以开始了。您可以访问claims principal对象,并将claims用作用户的标识信息,例如身份、角色、其他属性等

要开始,请查看


作为包装,我考虑使用JSON Web令牌(JWTS),因为有一个OWIN库可用于生成和解析这些。这里的用例是您进行身份验证,获取JWT,然后使用JWT获取OAuth 2.0承载令牌。如果您想将身份验证转移到其他地方,或者想在MVC端获取有关用户的其他信息,JWT非常有用

谢谢。我决定和JWT一起去。因为你提到的原因。