4

MongoDB Custom Authentication之后,任何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. 通过Jwt.io使用以下输入生成样本令牌。(启用自定义身份验证提供程序时使用与配置相同的算法和密钥,这里是 HS256 和 )

在此处输入图像描述

它的工作方式,

  • 它使用:中value提供的唯一性验证 MongoDB Stich 用户集合中的用户,如果用户存在,则返回该用户的对象 ID。sub"sub": "<unique user id>"
  • 如果用户不存在,那么它将针对输入创建一个并返回对象 ID。

查询是,

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

1 回答 1

4

这是来自MongoDB 支持的回复

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

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

为什么不返回登录失败

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

登录失败由外部身份验证提供者负责;不是缝合。

用户数据实际存储在哪里

用户数据应在您的数据库中进行管理。将此与自定义身份验证提供程序集成的最有效方法是在创建和/或登录操作类型上使用身份验证触发器。这将允许您在任何时候触发身份验证事件时运行缝合功能。

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

于 2018-12-04T13:27:22.733 回答