MongoDB Stitch JWT 自定义身份验证:需要有效的 UID(介于 1 到 128 个字符之间)

Posted

技术标签:

【中文标题】MongoDB Stitch JWT 自定义身份验证:需要有效的 UID(介于 1 到 128 个字符之间)【英文标题】:MongoDB Stitch JWT custom auth: valid UID required (between 1 and 128 characters) 【发布时间】:2020-09-26 03:37:02 【问题描述】:

如何在 node.js 中为 mongodb Atlas Cloud Stitch 设置 需要的有效 UID(1 到 128 个字符之间)?我正在使用 jasonwebtoken 包来签署 Stitch 凭证的令牌:

Nodejs:

 var token = jwt.sign(payload, Buffer.from(key), options);
 credential = new CustomCredential(token);
 stitchclient.auth.loginWithCredential(credential)
 .then(authedUser => console.log(`logged in with custom auth as user $authedUser.id`))
 .catch( err => console.error(`failed to log in with custom auth: $err`))

我可以发送,通过签名但 Stitch 返回:

使用自定义身份验证登录失败:StitchServiceError: invalid custom 身份验证令牌:需要有效的 UID(介于 1 到 128 个字符之间)

你的时间!

文档: https://docs.mongodb.com/stitch/authentication/custom-token/#usage

【问题讨论】:

【参考方案1】:

已解决:

在有效载荷上预先设置:

 "aud": "your api stitch id",
 "sub": "your user custom api key"
         var header = 
            alg: "HS256",
            typ: "JWT"
          
          var payload = 
            "aud": "your api stitch id",
            "sub": "your user custom api key",
            name : "name",
            pass : "pass",
           
          var options = 
            expiresIn : (60 * 60 * 24).toString(), // ONE DAY TO EXPIRATION
            algorithm: 'HS256'
           

稍后:

var token = jwt.sign(payload, Buffer.from("your user custom api key"), options);
credential = new CustomCredential(token);
stitchclient.auth.loginWithCredential(credential)
.then(authedUser => console.log(`logged in with custom auth as user $authedUser.id`))
.catch( err => console.error(`failed to log in with custom auth: $err`))

【讨论】:

【参考方案2】:

更具体地说,例如,如果您要从 Realm 函数生成令牌,您将从上下文中获取用户 ID:

exports = function(userMail) 
  const jwt = require('jsonwebtoken')
  const KEY_JWT = 'MY_SECRET_KEY'
  const token = jwt.sign(
                  email: userMail, 
                  sub: context.user.id,
                  aud: "<application_id>"
                ,
                  KEY_JWT,
                
                  expiresIn: "1h"
                
            )
  return token

【讨论】:

以上是关于MongoDB Stitch JWT 自定义身份验证:需要有效的 UID(介于 1 到 128 个字符之间)的主要内容,如果未能解决你的问题,请参考以下文章

如何在同构或 s-s-r 应用程序中使用 MongoDB Stitch Auth?

使用区块链技术的身份管理应用,MongoDB Stitch & MongoDB Atlas

如何在同构或SSR应用程序中使用MongoDB Stitch Auth?

使用 MongoDB 获取存储的用户凭据的 JAVA Spring 自定义身份验证

Asp Core:Azure Ad Auth + 自定义 JWT + 自定义身份存储

使用 JWT 创建 Firebase 自定义身份验证令牌