gpt4 book ai didi

python - 是否可以使用 aws cognito google oauth access_token 通过 boto3 获取临时凭证?

转载 作者:行者123 更新时间:2023-12-04 08:19:11 25 4
gpt4 key购买 nike

我想通过 AWS Cognito(Google 身份提供商)授权用户对 API 的请求。目前我可以从 aws 接收 JWT token (id_token 和 access_token)并授权请求,但我使用 id_token 而不是使用 access_token。但是有些文章说使用 id_token 来授权 API 请求是一种不好的做法(在 headers 中从前端发送 id_token),我应该使用 access_token。是否可以用 access_token 而不是 id_token 做同样的事情?

import boto3

id_token = get_token_from_headers(headers)

identity_client = boto3.client('cognito-identity')

id_response = identity_client.get_id(
AccountId='account_id',
IdentityPoolId='identity_pool_id',
Logins={
'cognito-idp.us-west-1.amazonaws.com/us-west-1_blabla: id_token'
}
)

response = identity_client.get_credentials_for_identity(
IdentityId=id_response['IdentityId'],
Logins={
'cognito-idp.us-west-1.amazonaws.com/us-west-1_blabla': id_token
})


access_key = response['Credentials']['AccessKeyId']
secret_key = response['Credentials']['SecretKey']
session_key = response['Credentials']['SessionToken']
看起来它可以从 assume_role_with_web_identity 获得带有 access_token 的临时凭证。 link to docs ,但文档说 WebIdentityToken此方法的参数仅在 oAuth 提供商为 Amazon 和 Facebook 的情况下接受 access_token

最佳答案

通过 AWS Cognito 身份池检索临时凭证似乎总是通过身份 token :https://docs.aws.amazon.com/cognito/latest/developerguide/google.html

Successful authentication results in a response object that contains an id_token, which Amazon Cognito uses to authenticate the user and generate a unique identifier


我不认为这违反了安全性,因为 AWS Cognito 身份池专门设置为使用身份 token ,您可以根据从 Identity 返回给您的身份 token 配置将向您的临时 AWS 凭证分配什么 IAM 角色池: https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html , https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html
但是,您不应该将 Google id_token 发送到(我假设是基于 AWS 的)API,在那里您可以获得 AWS 临时凭证。
相反,您应该在客户端获取 AWS 临时凭证,然后使用 Signature V4 header 调用 AWS 资源。
或者,如果您的 API 可以代入 AWS 服务角色并且您不需要获取临时 AWS 凭证,则可以使用 AWS Cognito 用户池。他们还支持 Google 身份提供商 - https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-social-idp.html
对于托管在 EC2 上的 API,您无法真正使用 Cognito 身份池生成的安全凭证,因为您无法通过 IAM 策略有效控制 EC2 HTTP(S) 端口访问。但是,您的 EC2 托管应用程序可以接受 Google id_token 并对其进行验证 - https://developers.google.com/identity/sign-in/web/backend-auth#:~:text=After%20you%20receive%20the%20ID,to%20verify%20the%20token's%20signature .没有理由使用身份池,并且通过 Google id_token 对 API 访问进行身份验证没有安全风险,因为 token 是由 Google 签名的,您可以在您的 API 上进行验证。您还可以使用 Cognito 用户池:您从客户端的用户池中检索访问 token 并将其发送到 EC2 上托管的 API。然后验证托管应用程序上的访问 token - https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html
如果您的 EC2 是通过 Elastic Load Balancer 访问的,您可以将用户身份验证转移到 ELB 级别。您可以使用 Cognito 用户池或 Google 身份提供商用户身份验证 - https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html
对于 Amazon API Gateway,您可以使用 Cognito 身份池:您在客户端生成的安全凭证将允许执行给定的 API Gateway,并且您在 API Gateway 上启用 IAM 身份验证 - https://aws.amazon.com/premiumsupport/knowledge-center/iam-authentication-api-gateway/ .您还可以使用 Cognito 用户池:您从客户端的用户池中检索访问 token 并将其发送到启用了 Cognito 身份验证的 API 网关 - https://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html

关于python - 是否可以使用 aws cognito google oauth access_token 通过 boto3 获取临时凭证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65570158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com