什么是Cognito应用程序客户端密钥

53

文档中,提到了一个应用客户端密钥(App Client Secret),但我找不到它的用途。

我发现JavaScript SDK没有使用它,我也不知道为什么,可能是因为很多JavaScript应用程序都运行在用户的浏览器上,不是公开秘密的地方,但这只是我的猜测。

如果这像是应用客户端ID(App Client ID)的密码一样,我看不出它如何提高安全性,因为无论谁窃取了你的应用客户端ID(App Client ID),也能够窃取应用客户端密钥(App Client Secret)。此外,应用客户端ID(App Client ID)是相当随机的,应该足以防止暴力攻击。

我想知道这个密钥的作用是什么,Cognito如何使用它以及它提供哪些功能。


这基本上是您的应用程序用于与其API进行身份验证的密码。 - Havenard
1
我也这么想......但是这不是有点多余了吗?用户池 id 是相当随机的,如果有人能从你的应用中提取用户池 id,他们也将能够提取应用密钥,那么有什么好处呢?只是为了让它看起来更安全吗? - Michel Feinstein
1
不确定,我不熟悉aws-cognito,但也许在某些时候ID会暴露给用户,而密钥则不会。 - Havenard
(为了澄清,我指的是客户端应用程序ID,而不是用户池ID) - Michel Feinstein
2个回答

39

没错,你说得对。这有点像密码。关于为什么要使用它,这不是Cognito特定的属性,而是OAuth2标准的一部分。事实上,在运行在浏览器上的公共应用程序中使用应用程序秘密没有任何意义。通常,在开发公共应用程序时,不使用客户端秘密。如果您这样做,那么您需要负责安全地存储它。

谈到Cognito,就像你所说的,它的JS SDK不使用客户端密钥(应该如此)。但是,如果您使用AWS CLI或boto3,则可以使用客户端密钥。在这种情况下,如果您的应用程序客户端有一个密钥,您应该使用此密钥和一些其他参数(用户名+ clientid 我想)计算哈希并将其作为参数传递。

但从安全性的角度来看,这并没有真正区别。


很高兴知道这不仅仅是我无法理解的问题。但是,我仍然不明白为什么禁止在公共应用程序中使用应用密钥。它肯定不会提供任何额外的安全性,但是,如果密钥泄露,它也不会造成任何安全漏洞,并且根据我目前的看法,也没有任何副作用。 - Michel Feinstein

28

App Client IDApp Client Secret在机器与机器之间的通信中是必需的,因为在这种通信中没有用户和密码。有一个授权类型是Client Credentials。要更好地理解这一点,您可以查看https://auth0.com/docs/api-auth/which-oauth-flow-to-use


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接