我正在构建muli-tenant saas(software as a service) architecture
。我必须为系统构建authentication system
。
根据我的研究,我认为我需要构建基于OAuth2.0
的身份验证系统和带有JWT tokens
的承载令牌。
在阅读了很多关于如何构建OAuth2.0服务器的OAuth2.0后,我仍然didn't understand
full concept of OAuth
并且对我是否需要它还有疑问,或者我需要其他一些身份验证系统
我的系统需要的是我们将向所有客户提供SDK
,每个客户都有Application Id
和a secret key
使用SDK客户端将连接到我们的系统
application ID
会将客户映射到我们系统中的应用程序,client secret key
将对应用程序内的客户端进行身份验证。我还需要构建基于OAuth2.0的身份验证系统或我可以根据需要建立自己的身份验证系统吗?
OAUTH2.0的用例是什么?当我们不需要它来实现时?
答案 0 :(得分:9)
首先,正如OAuth authentication
中明确指出的那样OAuth 2.0不是身份验证协议。
在访问应用程序的用户的上下文中的身份验证告诉应用程序当前用户是谁以及他们是否存在。完整的身份验证协议可能还会告诉您有关此用户的许多属性,例如唯一标识符,电子邮件地址以及当应用程序显示" Good Morning"时要调用它们的内容。
然而,OAuth没有告诉应用程序。
OAuth对用户一无所知,也没有说明用户如何证明他们的存在,或者即使他们仍然在那里。
就OAuth客户端而言,它要求提供令牌,获得令牌,并最终使用该令牌访问某些API。它对授权应用程序的人员或者根本没有用户知道任何事情并不了解。
使用OAuth有一个用户身份验证标准:OpenID Connect,与OAuth2兼容。
OpenID Connect ID令牌是一个签名JSON Web Token (JWT),与常规OAuth访问令牌一起提供给客户端应用程序。
ID令牌包含一组关于认证会话的声明,包括用户的标识符(子),发出令牌的身份提供者的标识符(iss),以及为其创建该令牌的客户端的标识符( AUD)。
在Go中,您可以查看coreos/dex
,OpenID Connect身份(OIDC)和带有可插拔连接器的OAuth 2.0提供程序。