如何在新的微服务中验证现有用户

Posted

技术标签:

【中文标题】如何在新的微服务中验证现有用户【英文标题】:How to authenticate existing users in new microservices 【发布时间】:2021-12-14 12:40:55 【问题描述】:

我们有带有用户身份验证系统的 laravel 5.2。

我们将 Angular.js 用于 UI 应用程序,它通过用户会话调用 laravel API。

用户使用邮箱和密码登录,然后使用项目。

但现在我们正在推出一款新产品,并尝试遵循微服务架构,让不同团队的应用程序解耦、可扩展和可维护。

使用 React 应用创建 UI,React 应用将调用新的微服务来完成这项工作。

新的 react 应用的入口点将是仍然是旧的应用。

用户在旧应用中登录,然后切换到新的 React 应用,然后在新 API 中使用新产品。

用户数据库相同,用户可以同时使用两种产品。

这里的问题是,我们如何在新服务中对用户进行身份验证/授权?

【问题讨论】:

我看到这个问题的票数接近,但我不认为关闭是合理的。这些是我希望在 Stack Overflow 上看到的更多问题:“如何”问题。我们已经有很多“解决我损坏的代码”的问题。请注意,好的问题不一定需要代码或“努力证明”。 【参考方案1】:

解决方案 1:使用 SSO(单点登录)系统,例如:https://github.com/aacotroneo/laravel-saml2

解决方案2:用户登录后,从旧项目向新项目发出Http请求(GuzzleHttp):

Http::post('http://my-new-project.com/auth', [
    'email' => 'user@example.com',
]);

可选择创建队列/作业, 然后在您的新项目中手动验证用户,例如:

$user = User::where('email', $request->input('email'))->first();
Auth::login($user);

【讨论】:

在解决方案2中,密钥email是错误的

以上是关于如何在新的微服务中验证现有用户的主要内容,如果未能解决你的问题,请参考以下文章

从旧数据库中检索数据并写入新数据库的微服务模式

使用 jwt 在微服务中进行身份验证

JHipster - 网关如何在微服务中进行身份验证?

Spring Cloud - 如何仅允许访问特定微服务的端点?

在微服务架构中组织用户和身份验证

API网关在微服务架构中的应用