我正在尝试在golang
中构建多租户架构,其中将有不同的服务,如Service-A
和Service-B
,每个服务将在不同的服务器上运行,我希望用户拥有single sign-in
解决方案并在所有提供的服务中获得身份验证。
就像Amazon AWS or Google
所做的那样,它有许多不同的服务,例如Amazon Cloud Front
,Amazon EC2
,Amazon S3
,并且所有服务都通过一次登录进行身份验证并从一个服务注销结果为log out from all connected services
。
我想在golang
中实现这一点,到目前为止,我发现了Open-id Connect
coreos/dex
但它缺乏解释其API和架构的文档。
设计此类身份验证系统的最佳架构是什么?
我认为使用JWT token
我可以实现它。 Is this architecture will be secure or there any better solution for this
?
我的方法
-----------------
| | shared
| | env file
|SERVICES A |---------------|
AUTH HEADER | | |
JWT TOKEN | | |
|---------------> ----------------- |
--------- ------------------ shared |
| | | SERVICE B | env file |
|Login | -----------| |----------- |
|Browser| | | | |
--------- ------------------ | |
| | | |
Login| |"JWT_TOKEN RESPONSE" | |
| | | |
-------------- enviroment file ------------
| |----------------------------------| |
| Main Server| | |
| | |JWT_SECRET|
-------------- |="secret" |
------------
答案 0 :(得分:1)
虽然您的解决方案肯定会奏效。它可能会使您的应用程序中的浏览器/移动/常规前端部分更复杂。而且可能更慢。
例如,您最终可能会在前端有效地加入数据。您向服务A发出一个请求,然后使用其中返回的信息向服务B发出其他请求。这对用户来说是一种糟糕的体验。
一旦像Netflix和Soundcloud这样的公司开创性的新概念是backend for frontend pattern。这是每种类型的前端设备的服务器端适配器,可以处理身份验证并聚合到下游服务的连接。