API网关和API微服务之间的相互身份验证?

API网关和API微服务之间的相互身份验证?,api,security,authentication,authorization,jwt,Api,Security,Authentication,Authorization,Jwt,我正在编写一个API网关,它将单个入口点暴露给各种其他API,这些API只能通过这个API网关访问 这个API网关将服务于各种前端的请求,例如网站、移动应用程序、桌面应用程序等等 我希望能够验证对我的API网关的请求是否来自这些源中的一个,而不仅仅是来自执行Curl请求的任何人。为此,我一直在寻找授权这些请求的方法。我已经研究了如何实现JWTs来验证这些请求来自何处,使用这个前端服务必须与API网关共享一个秘密,以便它们可以创建令牌来发送,然后API网关可以验证这些令牌。我想问题在于,这些秘密必

我正在编写一个API网关,它将单个入口点暴露给各种其他API,这些API只能通过这个API网关访问

这个API网关将服务于各种前端的请求,例如网站、移动应用程序、桌面应用程序等等

我希望能够验证对我的API网关的请求是否来自这些源中的一个,而不仅仅是来自执行Curl请求的任何人。为此,我一直在寻找授权这些请求的方法。我已经研究了如何实现JWTs来验证这些请求来自何处,使用这个前端服务必须与API网关共享一个秘密,以便它们可以创建令牌来发送,然后API网关可以验证这些令牌。我想问题在于,这些秘密必须安全地存储在前端应用程序中

我想知道是否有更好的方法来验证请求是否来自我希望它们来自的地方

有人有什么想法吗


提前感谢:

您可以制作自己的算法,生成唯一的时间相关访问令牌。该算法应在API网关和前端上实现


使用JSON web令牌的好处是JWT是一种流行的身份验证协议。为大多数流行的编程语言提供了开源库,因此您不必编写自己的代码。使用标准身份验证库还将使第三方应用程序更容易访问您的API。

正确的方法是实现身份提供程序单点登录/SSO,实现OpenId Connect或OAuth2。这些协议具有不同的身份验证流,适用于各种场景,包括您所指的场景。您可以将流客户机\u凭据用于可以确保客户机\u机密保持机密的场景,也可以将流隐式用于浏览器、javascript应用程序,在这些应用程序中无法对机密进行保密。 根据应用程序和前端将要工作的场景,您应该相应地配置客户端。然后,您的微服务只需要按照这些协议支持的方式之一验证针对身份提供者接收的令牌。OpenId Connect在实现上提供了一个内省端点,您可以在其中发送令牌,以便身份提供者自己验证它

请记住,JWT实际上不是一个协议,而是一种格式,一种标准格式,但只是一种格式。在许多身份提供者IdP上,您可以选择发出JWT令牌或引用令牌。后者只是一个不包含任何数据的GUID,但作为生成令牌时IdP内部存储的信息的引用。然后,IdP可以向使用该令牌的应用提供与该参考令牌相关的数据