Oauth 2.0 这是否可能使用cognito';s授权码授权类型作为api网关中的授权人?
我想知道,在保护API网关的安全中,是否有任何方法或可能性将授权码授予类型作为Authroizer实现?正如搜索到的,最建议使用“授权码”授权类型来保护API。 我在下面找到一篇文章,解释了如何使用cognito“客户端凭据”作为授权类型来保护api网关 我尝试了类似的方法来创建API网关,在这里我完成了以下集成:Oauth 2.0 这是否可能使用cognito';s授权码授权类型作为api网关中的授权人?,oauth-2.0,aws-api-gateway,amazon-cognito,websecurity,rest-security,Oauth 2.0,Aws Api Gateway,Amazon Cognito,Websecurity,Rest Security,我想知道,在保护API网关的安全中,是否有任何方法或可能性将授权码授予类型作为Authroizer实现?正如搜索到的,最建议使用“授权码”授权类型来保护API。 我在下面找到一篇文章,解释了如何使用cognito“客户端凭据”作为授权类型来保护api网关 我尝试了类似的方法来创建API网关,在这里我完成了以下集成: 在cognito中创建了用户池“UI Hosted”,授予类型为“Authorization code” 添加资源服务器 已选择默认范围,因为我不想添加任何新范围 关联回拨u
谢谢您的API的角色只是处理来自API客户端的传入访问令牌。API不关心使用什么流来获取令牌。以下是迄今为止最常见的行为:
- UI使用授权代码流(通常是PKCE变体)登录用户
- 这涉及到调用授权服务器的UI—例如AWS Cognito
- 登录完成后,UI使用访问令牌/JWT调用API网关URL
- 然后,API需要通过验证其签名来验证访问令牌
为了更好地控制行为,您可以在代码中创建一个自定义lambda授权程序,它返回一个AWS策略文档,如右侧的屏幕截图所示。我的和上面的源代码链接有一些进一步的细节,尽管它非常详细/高级。最后我在这里得到了答案 因此,我在这里创建了一个简单的flask逻辑来交换auth代码,以从cognito获取“id_令牌”,它还可以传入api头以获取响应
def getToken(auth_code):
response=''
try:
print("Code is", auth_code)
response = requests.post(url + '/oauth2/token',{'Content-Type':'application/x-www-form-urlencoded', 'grant_type': grant_type, 'client_id': App_client_id, 'code': auth_code, 'redirect_uri': 'http://localhost:5000/login'})
if response.status_code != 200:
return "Not a valid response"
print("Response is", response.json())
token_value = response.json()
print("Token value", token_value['id_token'])
return token_value['id_token']
except TypeError as e:
print("Error is",e)
您好@Gary,我刚刚用我厌倦了使用授权代码作为授权类型的用例更新了我的问题。但是它没有预期的效果很酷-看起来你正在进步。也许作为下一步,看看内置的Cognito授权器是否适合您——我已经在上面添加了一些细节。