如何在C#WEB API中返回JSON Web令牌?

我试图用JWT来保护用C#编写的WEB API,但是我还是挂了几件东西。 根据我的理解,流程应该是这样的:

  1. 客户端从某些客户端应用程序(Angular,.NET,Mobile等)向Web API提供用户名/密码
  2. Web APIvalidation用户名/密码是否正确,然后生成包含用户角色,信息,到期日期和其他相关信息的JWT(JSON Web令牌)。
  3. JWT被发送回客户端应用程序。
  4. 客户端应用程序挂起到JWT并将其与未来请求一起发送。

假设上述内容是正确的(如果不是,请告诉我),我无法理解以下内容。

  1. 一旦Web APIvalidation了用户名/密码并创建了JWT,JWT如何被传回? 我以某种方式将它添加到HttpResponseMessage对象? 我似乎无法就此找到明确的答案。
  2. 客户端应用程序应如何通过JWT? 这是附加到URL的JSON数据中添加到标题中的吗?
  3. 我看到很多教程引用了OWIN和OAUTH。 这些是什么,为什么我需要它们? 我在WEB API使用的数据库中保存用户凭据和角色。

一旦Web APIvalidation了用户名/密码并创建了JWT,JWT如何被传回? 我以某种方式将它添加到HttpResponseMessage对象?

通常的做法是成功,来自服务的响应在响应头中具有状态代码200 OK ,以及响应正文中的令牌相关数据

 200 OK Content-Type: application/json;charset=UTF-8 { "access_token": "NgCXRK...MzYjw", "token_type": "Bearer", "expires_at": 1372700873, "refresh_token": "NgAagA...Um_SHo" } 

客户端应用程序应如何通过JWT? 这是附加到URL的JSON数据中添加到标题中的吗?

使用访问令牌进行经过身份validation的请求

现在您已拥有令牌,您可以向API发出经过身份validation的请求。 这可以通过在请求中设置HTTP Authorization标头或查询字符串来完成,具体取决于服务器的配置方式。

在标题中

 Authorization: Bearer NgCXRK...MzYjw 

作为参数

 GET http://localhost:35979/v2/endpoint?access_token=NgCXRK...MzYjw 

我看到很多教程引用了OWIN和OAUTH。 这些是什么,为什么我需要它们?

OWIN – 用于.NET的开放式Web界面 http://owin.org/

OWIN定义了.NET Web服务器和Web应用程序之间的标准接口。 OWIN接口的目标是分离服务器和应用程序,鼓励开发用于.NET Web开发的简单模块,并且通过开放标准,激发.NET Web开发工具的开源生态系统。

OWIN OAuth 2.0授权服务器

OAuth 2.0框架使第三方应用程序能够获得对HTTP服务的有限访问权限。 客户端不是使用资源所有者的凭证来访问受保护资源,而是获取访问令牌(表示特定范围,生命周期和其他访问属性的字符串)。 授权服务器在资源所有者的批准下向第三方客户端颁发访问令牌。