MongoDB Stitch 中自定义身份验证的工作原理

How Custom Authentication Works in MongoDB Stitch

MongoDB Custom Authentication 之后,假定任何具有以下最小字段的 JWT Token 都可以使用 MongoDB Stitch 身份验证。此外,令牌需要由 External Authentication System

发行
{
  "aud": "<stitch app id>"
  "sub": "<unique user id>",
  "exp": <NumericDate>,
}

我已经测试过了,它也能正常工作

  1. 创建了 Stitch 应用程序并启用了 Custom Authentication Provider
  2. 的用户
  3. 通过 Jwt.io 使用以下输入生成示例令牌。 (启用自定义身份验证提供程序时使用与配置相同的算法和密钥,这里是 HS256 和)

它的工作方式,

查询是,

  1. 为什么它创建一个新用户而不是返回登录失败,这又像任何用户可以按需使用任何凭据登录一样工作?
  2. 如果MongoDB Stitch Custom Authentication涉及External Authentication System发出JWT,用户注册时用户数据实际存放在哪里? - MongoDB Stitch App CollectionExternal Authentication API System?

这是来自 MongoDB Support

的回复

为什么 Stitch 正在创建一个新的 "User"

本场景中创建的"User" Stitch是内部用户。此 "user" 还包含 JWT 提供的用户数据和元数据,并且不会与您的应用程序所链接的 Atlas 集群中的其他集合一起存储。请注意,如果不使用触发器或其他函数将其加载到数据库中,MongoDB 无法访问此 "user"。

为什么不返回登录失败

未返回登录失败,因为自定义身份验证提供程序仅根据自己的签名密钥副本检查来自外部系统的已签名 JWT。如果签名匹配则认为登录成功。

登录失败由外部认证提供商负责;不是史迪仔。

用户数据实际存储在哪里

用户数据应在您的数据库中进行管理。将其与自定义身份验证提供程序集成的最有效方法是在任何时候触发身份验证事件时使用 Authentication Trigger on Create and/or Login operation types. This would allow you to run a Stitch Function

有一个在 MongoDB blog 上使用身份验证触发器的示例,这可能有助于进一步解释该过程。