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

use*_*714 3 c# json-web-token

我正在尝试使用JWT来保护使用C#编写的WEB API,但我还是挂了几件事.根据我的理解,流程应该是这样的:

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

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

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

Nko*_*osi 6

一旦Web API验证了用户名/密码并创建了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"
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

在标题中

Authorization: Bearer NgCXRK...MzYjw    
Run Code Online (Sandbox Code Playgroud)

作为参数

GET http://localhost:35979/v2/endpoint?access_token=NgCXRK...MzYjw
Run Code Online (Sandbox Code Playgroud)

我看到很多教程引用了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服务的有限访问权限.客户端不是使用资源所有者的凭证来访问受保护资源,而是获取访问令牌(表示特定范围,生命周期和其他访问属性的字符串).授权服务器在资源所有者的批准下向第三方客户端颁发访问令牌.