Amazon web services 如何使用Cognito OAuth 2.0对API网关请求进行身份验证,而不使用应用程序客户端密码?

Amazon web services 如何使用Cognito OAuth 2.0对API网关请求进行身份验证,而不使用应用程序客户端密码?,amazon-web-services,oauth,oauth-2.0,aws-api-gateway,amazon-cognito,Amazon Web Services,Oauth,Oauth 2.0,Aws Api Gateway,Amazon Cognito,我正在使用aws sdk管理我的应用程序的登录和注册,sdk要求我的应用程序客户端没有密钥。这是一个问题,因为我打算使用Cognito对API网关进行身份验证。我尝试在应用程序客户端设置上启用OAuth 2.0客户端凭据流,选择一个作用域并将其提供给API方法,但当我尝试保存应用程序客户端设置时,我得到: “我们无法更新您的应用程序配置:如果客户端没有客户端密码,则无法选择客户端\u凭据流。(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:I

我正在使用aws sdk管理我的应用程序的登录和注册,sdk要求我的应用程序客户端没有密钥。这是一个问题,因为我打算使用Cognito对API网关进行身份验证。我尝试在应用程序客户端设置上启用OAuth 2.0客户端凭据流,选择一个作用域并将其提供给API方法,但当我尝试保存应用程序客户端设置时,我得到:

“我们无法更新您的应用程序配置:如果客户端没有客户端密码,则无法选择客户端\u凭据流。(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:InvalidOAuthFlowException”


有没有更好的方法用Cognito配置API网关?我做错什么了吗?

您需要为您的API创建一个新的应用程序客户端,其中包含一个秘密

前端客户端-应用程序客户端,不带out secret 后端客户端/api-具有机密的应用程序客户端

客户端凭据通常是服务身份验证的一种方法。您必须安全地存储机密。因此,在不安全的前端应用程序(如html网站)中使用不安全


希望这有帮助。

为了补充Arun的答案,API不需要Cognoto OAuth客户端条目,只需要验证收到的Cognoto访问令牌

通常,这是通过从Cognito下载JWKS密钥来完成的,API网关有一个自动完成这项工作的设置


如果您在令牌验证后识别用户时遇到问题,我可以提供更多详细信息。

如果我使用不带密码的应用程序客户端登录,并使用带密码的应用程序客户端验证API调用,这将如何工作?我是否需要获得由带密码的应用程序客户端生成的访问令牌才能验证API?S对不起,我回答了有关客户端凭据如何工作的问题。要使客户端凭据工作,您应该有一个秘密。但您不能在html网站上使用秘密。这意味着您不能在前端使用客户端凭据方法。对于html客户端,您应该有一个没有秘密的客户端,并使用
隐式授予
方法。当您将请求发送到api端点,如果您的api方法正在根据任何自定义范围进行验证,则发送
access\u令牌
,否则发送
id\u令牌
。您不需要使用任何
client\u凭据
,除非您需要为配置服务间授权,例如,您需要调用另一个
api
>从现有的
api