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



第一个应用程序是在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会话收集获取数据:

{
"_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}}"
}

饼干 (nature_app( id:

s%3AOtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN.8Yy2SKhGyt3NCEdka90JmEyrdphPas1yt6OHabDeqis

现在我正在开发第二个应用程序 - 带有.Net Core 3的管理面板,EntityFramework。这两个应用将位于同一域中。第一个应用程序:wow-nature.com,第二个应用程序:wow-nature.com/admin。 如果用户登录到Expressjs应用程序,并且他单击了管理面板链接 - .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.我不知道.Net Core如何与Web令牌一起工作。 我读到了从Laravel到Nodejs的认证用户。在其他地方,我读到有关它的安全疑问。

  2. 身份验证0。

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

从 Expressjs 应用程序进行 .Net Core 应用程序身份验证的方式如何更安全? 什么是最佳实践?

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

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

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

最新更新