【问题标题】:How Custom Authentication Works in MongoDB Stitch自定义身份验证如何在 MongoDB Stitch 中工作
【发布时间】:2018-11-29 12:15:39
【问题描述】:

MongoDB Custom Authentication 之后,任何具有以下最小字段的JWT Token 都适用于 MongoDB Stitch 身份验证。另外,token需要External Authentication System发行

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

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

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

它的工作方式,

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

查询是,

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

【问题讨论】:

    标签: mongodb jwt custom-authentication mongodb-stitch


    【解决方案1】:

    这是MongoDB Support的回复

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

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

    为什么不返回登录失败

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

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

    用户数据的实际存储位置

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

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

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 2013-10-23
    • 2020-04-01
    • 2022-12-10
    • 1970-01-01
    • 2019-05-02
    • 2018-09-26
    • 1970-01-01
    相关资源
    最近更新 更多