2017-02-28 43 views
1

我正在使用Lambda函数,使用Cognito用户池授权器通过API网关执行。Lambda Cognito用户池授权人 - 我可以自动获取自定义用户属性吗?

我知道我可以从event.requestContext.authorizer.claims获得“标准”用户属性(如sub,email,cognito:username等)。

但是这不包括自定义用户属性(如custom:myAttribute)。

我知道我可以通过adminGetUser得到他们,这个工程,但我想知道我是否可以保存这个电话,并以某种方式自动获取这些自定义属性event

+0

我在我的代理lambda中获取event.requestContext.authorizer.claims,如何获得对http代理中事件或授权者对象访问的访问权限,我想将用户名作为标题发送到我的服务器。请帮忙 –

回答

1

你已经看过这个文档的自定义索赔? http://docs.aws.amazon.com/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html。 您将需要定制以下方式来定义上下文属性:

{ 
    "context" : { 
     "role" : "$context.authorizer.claims['custom:myAttribute']" 
    } 
} 
+0

好吧,我想这意味着我不能使用“Lambda代理集成”,我需要编写我自己的身体映射模板? 如果是,是否有标准模板可以复制并添加我的自定义属性,以便Lambda函数的工作方式与之前完全相同(即使用“代理集成”)? – thomers

+0

嗯所以我再次检查了一个方法与Lambda代理集成(基本上不变,我上面描述的场景),一个与身体映射模板。原来没有区别 - 两者都包含“authorizer.claims”中的自定义属性... ... 因此,无论我之前是否失明,还是其他方面发生了变化。 我会继续监测这个问题,并用任何新的启示进行更新。 – thomers

+0

更新:它仍然像魅力一样工作。不知道为什么它以前没有工作。 – thomers

0

在添加自定义属性到Cognito用户游泳池和值分配给它的用户有几个原因,它获得不会出现在requestContext.authorizer.claims集合中。

第一个也是最明显的是,您需要通过您使用的应用程序客户端来使自定义属性可读,以生成您正在进行身份验证的ID令牌。如果您使用的是AWS控制台,则通过导航至App Clients -> Show Details -> Set attribute read and write permissions完成此操作,然后勾选您想让Lambda可见的属性。

即使您已完成第一步,您的属性没有出现的第二个原因是用户的声明在您生成的ID令牌中被编码。这意味着如果您在使属性可读之前创建了一个ID令牌,您仍然不会看到它们。解决此问题的方法是仅为您的用户生成新的ID令牌,然后您应该在Lambda的请求上下文中看到这些属性。

相关问题