【发布时间】:2018-07-07 15:42:01
【问题描述】:
我正在使用 auth0 对用户进行身份验证,以接收包含以下声明的 id 令牌
"http://myapp.com/scope": "write"
使用带有 OpenID 身份验证提供程序(即 auth0)的 Cognito 身份池,我能够成功获取临时凭证来访问 aws 服务。但是,我想根据上面的自定义声明限制对这些服务的访问。我认为执行此操作的正确方法是编辑与我的身份池关联的信任策略,但我不确定如何添加条件来检查我的信任策略中的上述声明。
当前默认的信任策略是
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-2:078855cf-aa9b-400e-a762-dfcf27ec495c"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
如何确保只有具有 auth0 "write" 范围的用户才能写入我的 s3 服务?
更新:
通过避开 cognito 身份池,我能够将原始 id_token 传递给 aws。但是,auth0 强制我的自定义声明使用"http://mywebsite.com" 命名。这是一个问题,因为 IAM 在我的情况下不允许使用多个冒号。我需要添加条件
"ForAnyValue:StringLike": {
"food-flick.auth0.com/:https://foodflick.com/scope": "write:rests"
}
但 IAM 不允许这样做,并且 Auth0 会强制我为我的声明命名。我能做些什么?我可以将我的范围存储在标准声明中,但这会产生误导。我可以将我的访问令牌而不是我的 id_token 传递给 IAM 吗?如果是这样,当给定一组值时,我将如何更改信任策略以检查适当的 aud 值?
【问题讨论】:
-
您找到解决方案了吗?
-
不,我没有。我选择了firebase,使用了signInWithCustomToken。我的 auth0 服务器在其 idToken 中返回一个 firebase 令牌
-
找到解决办法了吗?
标签: amazon-web-services amazon-s3 amazon-cognito amazon-iam auth0