自定义身份验证在MongoDB Stitch中如何工作

时间:2018-11-29 12:15:40

标签: mongodb jwt custom-authentication mongodb-stitch

here之后,给出以下字段最少的任何JWT Token与MongoDB Stitch Authentication一起使用。另外,令牌必须由External Authentication System

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

我已经对此进行了测试,并且效果很好

  1. 创建了Stitch App,并为用户启用了Custom Authentication Provider
  2. 通过MongoDB Custom Authentication使用以下输入生成样本令牌。 (启用Custom Authentication Provider时使用与配置相同的算法和密钥,这里是HS256和)

Jwt.io

以这种方式起作用

  • 它将使用valuesub中提供的唯一"sub": "<unique user id>"来验证MongoDB Stich Users Collection中的用户,如果该用户存在,则返回该用户的对象ID。
  • 如果用户不存在,则它将根据输入创建一个并返回对象ID。

查询是

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

1 个答案:

答案 0 :(得分:3)

这是MongoDB Support

的回复

为什么Stitch会创建一个新的“用户”

在这种情况下,Stitch创建的“用户”是内部用户。此“用户”还包含JWT提供的用户数据和元数据,并且不会与其他集合一起存储在与应用程序链接的Atlas集群中。请注意,如果不使用触发器或其他函数将其“加载”到数据库中,则MongoDB无法访问此“用户”。

为什么没有返回登录失败

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

外部身份验证提供者有责任使登录失败;不是针迹。

用户数据的实际存储位置

用户数据应在数据库中进行管理。将其与自定义身份验证提供程序集成的最有效方法是在创建和/或登录操作类型上使用Authentication Trigger。这样,您可以在触发身份验证事件的任何时间运行Stitch Function

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