第一个应用程序是在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(。管理面板没有登录面板。
我找到了三个选择,但出于安全原因我怀疑:
- .Net Core必须读取Expressjs cookie id并在MongoDB中检查它。如果会话有效 - .Net Core 将对会话进行身份验证。之后,.Net Core必须重新生成会话ID。但是我的cookie id和mongodb id是不同的:
s%3AOtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN.8Yy2SKhGyt3NCEdka90JmEyrdphPas1yt6OHabDeqis != OtNPaWfyE6tpkfpIWh-m7XvCAp3No-JN
而且 - 这种方法安全吗?
Jwt.我不知道.Net Core如何与Web令牌一起工作。 我读到了从Laravel到Nodejs的认证用户。在其他地方,我读到有关它的安全疑问。
身份验证0。
我很困惑。对不起,我是这种情况的初学者。
从 Expressjs 应用程序进行 .Net Core 应用程序身份验证的方式如何更安全? 什么是最佳实践?
我从 Asp.Net 核心开发人员那里得到了答案 - 这是不可能的。出于安全原因,我们无法访问 .Net core cookie 修改。 因此,我重新创建了应用程序:
- 使用 IdentityServer (OpenId( 进行主身份验证。
- Expressjs 是客户端。
- 其他.Net Core应用程序也是客户端。
更好的方法是按标准工作。无需重新发明自行车。