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

2024-03-06

我正在尝试使用 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 传回?这是在 JSON 数据中、附加到 URL、添加到标头中吗?
  3. 我看到很多参考 OWIN 和 OAUTH 的教程。这些是什么以及为什么我需要它们?我在 WEB API 使用的数据库中保存用户凭据和角色。

一旦 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"
}

客户端应用程序应如何将 JWT 传回?这是在 JSON 数据、附加到 URL、添加到标头?

使用访问令牌发出经过身份验证的请求

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

在标题中

Authorization: Bearer NgCXRK...MzYjw    

作为参数

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

我看到很多参考 OWIN 和 OAUTH 的教程。这些是什么 为什么我需要它们?

OWIN — .NET 的开放式 Web 界面 http://owin.org/ http://owin.org/

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

OWIN OAuth 2.0 授权服务器 http://www.asp.net/aspnet/overview/owin-and-katana/owin-oauth-20-authorization-server

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# WEB API 中返回 JSON Web 令牌? 的相关文章

随机推荐