将凭据发送到 Rest API 以接收 JWT 令牌的安全方法是什么?

What is a secure approach for sending credentials to a Rest API to receive a JWT Token?

我在 .Net 核心中设计了一个 RestFul API,有两个端点。两者都是 Http POST 方法,它们在 IIS 中部署时使用 Https。

  1. 接收令牌
  2. 发送数据

所以我的方法是,客户端将像这样通过 JSON 有效负载将用户 ID 和密码传递到 ReceiveToken 端点。

{  
  "vendorUserID": "user123",
  "vendorPassword": "passwd1234"  
}

我的服务器端有一个数据库,其中存储了每个用户的凭据 - role。我正在验证用户 ID 和密码,如果它们是正确的,那么我将颁发一个 JWT 令牌 - 包含两个声明 VendorUserIDrole.

此 JWT 令牌已发送给用户。

现在,在我的第二个端点中,用户可以传递业务数据(有效负载)以及 JWT Bearer 令牌(在 header 中)。我在我的 Action 方法中设置了 [Authorize(Roles = "contributer, admin")] 属性,其中包含允许的角色名称,这样只有有效用户才能 post 业务数据。

到目前为止 API 工作正常。

但我对通过我的第一个端点发送 useridpassword 有疑问。这是一个好方法吗?任何人都可以看到密码,因为这是以纯文本形式发送的吗?有哪些更强大的方法来确保这一点?

建立正确的 HTTPS 连接后,只有发送方和接收方可以看到 POST 负载。因此,您可以将其作为常规 JSON 文本发送。

我相信所有 OAuth 提供者,如 Google、Facebook 等,都遵循相同的规则,并在 HTTPS 连接内以纯文本形式发送凭据。

您可能需要使用您的服务器配置在 Rest API end-point 上强制使用 HTTPS - 以确保您的某些客户端不会在没有意识到的情况下通过 HTTP 发送 plain-text 凭据。

并且,还要确保您使用由可信机构签署的证书。这可确保客户端不会与冒充您的服务器的虚假服务器建立 HTTPS 连接。