.Net Core 应用程序如何从 Expressjs 会话进行身份验证?

How .Net Core app can authenticate from Expressjs session?

第一个应用是在Expressjs上开发的。 身份验证模块:

passport.js
express-session
cookie-parser
connect-mongo

会话中间件

app.use(
  session({
    secret: 'kkkjfdfdf787dfdfdf7SSDSf7787asXZ',
    store: new MongoStore({ url: mongoData.url, mongoOptions: {useUnifiedTopology: true}}),
    name: 'nature_app',
    rolling: true,
    resave: true,
    saveUninitialized: false,
    cookie: {
      secure: false,
      maxAge: process.env.MAX_SESS_AGE_SEC * 1000
    }
  })
)

Mongodb登录后session采集获取数据:

{
    "_id" : "OtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN",
    "expires" : ISODate("2019-09-21T16:04:18.732+03:00"),
    "session" : "{\"cookie\":{\"originalMaxAge\":3600000,\"expires\":\"2019-09-21T13:04:18.732Z\",\"secure\":false,\"httpOnly\":true,\"path\":\"/\"},\"csrfSecret\":\"rz_etmj7859KAC0OQRCPiyRF\",\"flash\":{},\"passport\":{\"user\":3143}}"
}

Cookie (nature_app) ID:

s%3AOtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN.8Yy2SKhGyt3NCEdka90JmEyrdphPas1yt6OHabDeqis

现在我正在开发第二个应用程序 - 使用 .Net Core 3 的管理面板,EntityFramework。这两个应用程序将进入同一个域。第一个应用:wow-nature.com,第二个:wow-nature.com/admin。 如果用户登录到 Expressjs 应用程序,并单击管理面板 link - .Net Core 必须自动登录(如 SSO)。管理面板将没有登录面板。

我找到了三个选择,但出于安全原因我怀疑:

  1. .Net Core 必须读取 Expressjs cookie id 并在 MongoDb 中检查它。如果会话有效 - .Net Core 将对会话进行身份验证。之后.Net Core 必须重新生成会话 ID。但是我的 cookie id 和 mongodb id 不同:
s%3AOtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN.8Yy2SKhGyt3NCEdka90JmEyrdphPas1yt6OHabDeqis != OtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN

而且 - 这种方法安全吗?

  1. Jwt. I don't know how .Net Core works with web tokens. I read about authencation users from Laravel to Nodejs。在其他地方我读到关于它的安全疑虑。

  2. Auth0

我很困惑。对不起,我是这种情况的初学者。

.Net Core 应用从 Expressjs 应用进行身份验证的哪种方式更安全? 最佳做法是什么?

我从 Asp.Net 核心开发人员那里得到了答案 - 这是不可能的。出于安全原因,我们无法访问 .Net 核心 cookie 修改。 所以,我重新创建了应用程序:

  1. 使用 IdentityServer (OpenId) 进行主要身份验证。
  2. Expressjs 是客户端。
  3. 其他 .Net Core 应用程序也是客户端。

更好的方法是按标准工作。无需重新发明自行车。