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>,
}
我已经测试过了,它也能正常工作
- 创建了 Stitch 应用程序并启用了
Custom Authentication Provider
的用户
- 通过 Jwt.io 使用以下输入生成示例令牌。 (启用自定义身份验证提供程序时使用与配置相同的算法和密钥,这里是 HS256 和)
它的工作方式,
- 它正在使用
sub
中提供的唯一 value
验证 MongoDB Stich 用户集合中的用户:"sub": "<unique user id>"
如果用户存在,则返回该用户的对象 ID。
- 如果用户不存在,则它会根据输入创建一个并返回对象 ID。
查询是,
- 为什么它创建一个新用户而不是返回登录失败,这又像任何用户可以按需使用任何凭据登录一样工作?
- 如果
MongoDB Stitch Custom Authentication
涉及External Authentication System
发出JWT
,用户注册时用户数据实际存放在哪里? - MongoDB Stitch App Collection
或 External 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 上使用身份验证触发器的示例,这可能有助于进一步解释该过程。
在 MongoDB Custom Authentication 之后,假定任何具有以下最小字段的 JWT Token
都可以使用 MongoDB Stitch 身份验证。此外,令牌需要由 External Authentication System
{
"aud": "<stitch app id>"
"sub": "<unique user id>",
"exp": <NumericDate>,
}
我已经测试过了,它也能正常工作
- 创建了 Stitch 应用程序并启用了
Custom Authentication Provider
的用户
- 通过 Jwt.io 使用以下输入生成示例令牌。 (启用自定义身份验证提供程序时使用与配置相同的算法和密钥,这里是 HS256 和)
它的工作方式,
- 它正在使用
sub
中提供的唯一value
验证 MongoDB Stich 用户集合中的用户:"sub": "<unique user id>"
如果用户存在,则返回该用户的对象 ID。 - 如果用户不存在,则它会根据输入创建一个并返回对象 ID。
查询是,
- 为什么它创建一个新用户而不是返回登录失败,这又像任何用户可以按需使用任何凭据登录一样工作?
- 如果
MongoDB Stitch Custom Authentication
涉及External Authentication System
发出JWT
,用户注册时用户数据实际存放在哪里? -MongoDB Stitch App Collection
或External 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 上使用身份验证触发器的示例,这可能有助于进一步解释该过程。