我正在使用auth0对用户进行身份验证,以接收包含以下声明的ID令牌
"http://myapp.com/scope": "write"
将Cognito身份池与OpenID身份验证提供程序(即auth0)一起使用,我能够成功获取临时凭据以访问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服务?
更新:
我能够通过避免认知身份池将原始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值?
答案 0 :(得分:0)
联合声明不会传播到AWS会话中,也不会在信任策略中访问。可能前进的方法是使用RoleMappings将您的自定义声明映射到特定角色。不幸的是,在这个时候,我认为有一个突出的问题阻止了与OIDC合作的角色映射。如果问题得到解决,我会更新这篇文章。