一个应用程序正在与AWS Cognito(通过Open ID Connect协议)进行通信,后者已连接到ADFS(通过SAML进行通信)。 Cognito本质上是在“代理” ADFS服务器。
ADFS包含应用程序所需的组映射,我想在应用程序中显示这些组(由ID令牌中的cognito:groups
属性检索。
在AWS Cognito用户池设置中,我看不到将ADFS组映射到Cognito组的方法-我需要依靠我的用户池的自定义属性来映射到ADFS属性,还是我是否缺少一些配置,这些配置允许Cognito动态创建新组并自动将用户分配给Cognito中的组?
编辑:为澄清起见,是否可以设置Cognito在导入用户时添加/创建组(不是作为自定义属性,而是实际可管理的cognito组)?
答案 0 :(得分:1)
我遇到了同样的问题,并且在Cognito中也没有找到静态映射选项。
我看到的唯一方法是将AD组映射到Cognito中的custom:adgroups属性,并设置一个Cognito“令牌生成前” lambda触发器。 lambda读取custom:adgroups的值,并手动覆盖用户的Cognito组。
注意-这并不会永久更改认知用户的组,仅对于当前会话,而是从应用程序角度来看,这正是我所需要的。
请在此处查看伪静态(非条件)ADMIN组分配示例:
def lambda_handler(event, context):
print(f'incoming event: {json.dumps(event)}')
# manual cognito group override
if event['triggerSource'] == "TokenGeneration_HostedAuth":
event['response'] = {
"claimsOverrideDetails": {
"groupOverrideDetails": {
"groupsToOverride": [
"ADMIN"
]
}
}
}
return event
此处有更多详细文档:https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-lambda-pre-token-generation.html
答案 1 :(得分:-1)
this link中介绍了如何使用Cognito设置ADFS。回答您问题的部分是步骤4,第5项中的映射。我正在复制下面的相关文本:
Choose Attribute mapping. These mappings map the claims from the SAML assertion from AD FS to the user pool attributes.
确保ADFS正在发送断言中的组。为组this link设置ADFS端可能会很有用。
您可以在Firefox中使用SAML-tracer插件调试流。