如何在C#WEB API中返回JSON Web令牌?
我试图用JWT来保护用C#编写的WEB API,但是我还是挂了几件东西。 根据我的理解,流程应该是这样的:
- 客户端从某些客户端应用程序(Angular,.NET,Mobile等)向Web API提供用户名/密码
- Web APIvalidation用户名/密码是否正确,然后生成包含用户角色,信息,到期日期和其他相关信息的JWT(JSON Web令牌)。
- JWT被发送回客户端应用程序。
- 客户端应用程序挂起到JWT并将其与未来请求一起发送。
假设上述内容是正确的(如果不是,请告诉我),我无法理解以下内容。
- 一旦Web APIvalidation了用户名/密码并创建了JWT,JWT如何被传回? 我以某种方式将它添加到HttpResponseMessage对象? 我似乎无法就此找到明确的答案。
- 客户端应用程序应如何通过JWT? 这是附加到URL的JSON数据中添加到标题中的吗?
- 我看到很多教程引用了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服务的有限访问权限。 客户端不是使用资源所有者的凭证来访问受保护资源,而是获取访问令牌(表示特定范围,生命周期和其他访问属性的字符串)。 授权服务器在资源所有者的批准下向第三方客户端颁发访问令牌。