Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 调试AWS HTTP API(beta版)JWT授权程序_Amazon Web Services_Amazon Api Gateway - Fatal编程技术网

Amazon web services 调试AWS HTTP API(beta版)JWT授权程序

Amazon web services 调试AWS HTTP API(beta版)JWT授权程序,amazon-web-services,amazon-api-gateway,Amazon Web Services,Amazon Api Gateway,我正在试验这个功能 作为实验的一部分,我试图使用“JWT授权者”授权访问api: 文件规定,联合工作组在被授权或拒绝之前,将经历一个由一系列检查/验证组成的工作流程 如果没有授权人,端点是可访问的。通过授权人,我得到一个401响应,其中包含json: {"message":"Unauthorized"} 我正在尝试确定授权人在哪一步拒绝JWT。我已经为api端点设置了一个日志,并看到了请求,但它没有提供授权失败的原因 有没有办法调试授权人失败的原因/原

我正在试验这个功能

作为实验的一部分,我试图使用“JWT授权者”授权访问api:

文件规定,联合工作组在被授权或拒绝之前,将经历一个由一系列检查/验证组成的工作流程

如果没有授权人,端点是可访问的。通过授权人,我得到一个401响应,其中包含json:

{"message":"Unauthorized"}
我正在尝试确定授权人在哪一步拒绝JWT。我已经为api端点设置了一个日志,并看到了请求,但它没有提供授权失败的原因

有没有办法调试授权人失败的原因/原因


注意:这不是在谈论lamda授权人,我也不是在使用Cognito生成JWT。

401意味着无法建立用户的身份验证。基本上,JWT要么有故障,要么没有在API网关所期望的报头中提供请求

此外,API网关不是一个成熟的服务器,所以无法调试API网关是如何利用JWT的。虽然这可能是一个令人沮丧的问题,但请注意,它确实为您的后端提供了一个高度可扩展、可靠且廉价的HTTP端点,并提供了内置的基于JWT的身份验证支持,而且它刚刚在大多数地区可用。所以,我现在还不会把它划掉

回到你的问题上来。虽然我不知道如何帮助调试部分。我可以告诉您我在不编写一行代码的情况下使用JWT authorizer进行实验的步骤

  • 创建了一个临时JWK,通过它可以使用您选择的孩子和RS256算法为您提供公钥和私钥+公钥对集
  • 复制公钥并将其插入您的颁发者\ u URL/.well-known/jwks.json中。如果您没有使用Cognito,您可以将文件放在S3中进行实验(在本例中,您的S3 bucket url将成为发行者url)。如果使用S3,您还需要创建ISSUER_URL/.well_known/openid配置文件,并在实验期间公开这些文件。这些文件采用标准格式(OIDC),您可以在线搜索。请注意,jwks.json文件只包含公钥,因此即使其他人得到了它也无所谓
  • 获取私钥+公钥对集,然后转到以获取单独的私钥和公钥RSA pem密钥
  • 转到并选择RS256 algo、kid header claim(使用第一步中用于生成密钥的相同值)、有效负载中的aud claim(这应与您在HTTP API网关中设置JWT authorizer时选择的配置相匹配)、有效负载中的iss claim(这应与颁发者URL相匹配)、有效负载中的exp claim(您可以使用JWT的到期时间),有效负载中的nbf声明(只需从中获取当前时间戳)此外,您从上一步获得的公共和私有RSA pem密钥将放置在其相应的签名部分。如果您在使用HTTP API网关设置JWT authorizer时设置了授权范围,还将提供scp有效负载声明

  • 在完成所有这些之后,我能够测试API网关是否能够与我生成的JWT一起工作。现在,我可以更加自信地开始编写代码,幸运的是,JAVA、node等工具已经可用。

    看看响应。有一个名为www authenticate的头,其中包含一个错误响应onse,如果身份验证失败

    i、 e:

    www-authenticate:Bearer-scope=”“error=“无效的令牌”error\u description=“JWKS通信错误”


    如果您使用curl,您可以使用-v来查看完整的响应,包括标题。

    对于遇到

    OIDC发现终结点元数据中的颁发者与配置的颁发者不匹配“

    在S3上托管OpenId配置和JWK文件时出错

    确保你使用

    https://BUCKETNAME.s3.amazonaws.com/
    
    而不是

    https://BUCKETNAME.REGION.s3.amazonaws.com/
    

    对于issuer字段。

    您可以使用解码JWT令牌并验证有效负载是否正确以及是否符合预期吗?有趣的是,我实际上使用JWT.io生成了令牌。令牌完全可能有一个不正确/缺失的字段,或者令牌内容与授权人设置不匹配。我的主推在t他现在要做的是确定调试是否可行。如果我无法洞察到底出了什么问题,那么我不想继续使用Amazon的网关,因为能够进行调试对我和我的团队来说是非常重要的。(我目前正在评估AWS API网关作为团队内部使用的工具)我刚刚进入了学习的同一阶段。似乎有一种选择是将所有传入的[HTTP请求]路由到一个无防护的[lambda],在那里进行手动调试。(下一步可能会尝试)感谢您写得这么好的回答。我以后会回到http api网关,我相信您的回答届时会对我有所帮助,同时也会立即对其他人有所帮助。谢谢!这给了我“OIDC发现端点元数据中的颁发者与配置的颁发者不匹配”,因此我可以继续:)