Authentication golang中的单点登录身份验证

Authentication golang中的单点登录身份验证,authentication,go,oauth,oauth-2.0,openid-connect,Authentication,Go,Oauth,Oauth 2.0,Openid Connect,我正在尝试在golang中构建一个多租户体系结构,其中将有不同的服务,如Service-a和Service-B每个服务将在不同的服务器上运行,我希望用户有一个单一登录解决方案,并在提供的所有服务中获得身份验证 正如亚马逊AWS或谷歌所喜欢的,它有许多不同的服务,如亚马逊云前端,亚马逊EC2,亚马逊S3,所有服务都通过一次登录进行身份验证,从一个服务注销会导致从所有连接的服务注销 我试图在golang中实现这一点,到目前为止,我发现openid-Connect 但它缺乏解释其API和体系结构的文档

我正在尝试在
golang
中构建一个多租户体系结构,其中将有不同的服务,如
Service-a
Service-B
每个服务将在不同的服务器上运行,我希望用户有一个
单一登录
解决方案,并在提供的所有服务中获得身份验证

正如
亚马逊AWS或谷歌
所喜欢的,它有许多不同的服务,如
亚马逊云前端
亚马逊EC2
亚马逊S3
,所有服务都通过一次登录进行身份验证,从一个服务注销会导致
从所有连接的服务注销

我试图在
golang
中实现这一点,到目前为止,我发现
openid-Connect
但它缺乏解释其API和体系结构的文档

设计此类认证系统的最佳架构是什么?

我认为使用JWT令牌可以实现它
此体系结构是否安全,或者是否有更好的解决方案

我的方法


而你的解决方案肯定会奏效。这可能会使编写应用程序的浏览器/移动设备/通用前端部分变得更加复杂。而且可能更慢

例如,您可能最终会在前端有效地连接数据。您向服务A发出一个请求,然后使用返回的信息向服务B发出其他请求。这对用户来说是一种糟糕的体验


像Netflix和Soundcloud这样的公司开创性的一个新概念是。它是每种类型前端设备的服务器端适配器,可以处理身份验证并聚合到下游服务的连接

这个问题很重要。可能的答案太多,或者好的答案对于这种格式来说太长。请添加详细信息以缩小答案集或隔离可以在几段中回答的问题。@jurgemaister我正在编辑并添加详细信息,这将使您很容易回答。@jurgemaister我编辑过,请现在检查它。只有我可以说,您的方法应该有效。更好是一个主观术语。还有很多其他的选择,正如@jiangd所说,对于如此广泛的问题,我们唯一能说的是,“作为一个选择,你的方法应该有效”
                          -----------------        
                          |               |    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" |          
                                                    ------------