1

在我的React Native移动应用程序中,我使用AWS Amplify将有关用户操作(屏幕视图、按钮点击、滑动等)的信息通过AWS PinpointAnalytics.record(...)发送到AWS Pinpoint,后者又将它们输入AWS Kinesis Data Stream。我创建了一个AWS Lambda Python 3 函数,用于侦听此数据流中的事件。

得益于出色的文档,设置变得轻而易举,并且一切正常-除了一件事:

当用户登录时,使用Analytics.updateEndpoint(...). 在 lambda 函数中,我base64对事件负载进行解码,如本示例代码所示,示例事件负载大致如下所示:

{
    "event_type": "_session.start",
    "event_timestamp": 1572345161558,
    "application": {
        "app_id": "<some app ID>",
        "cognito_identity_pool_id": "us-east-1:<some pool ID>",
        "sdk": {},
        "version_name": "<the app version I put in using updateEndpoint(...)>"

       ... <snipped for brevity> ...

    },
    "attributes": {},
    "endpoint": {
        "ChannelType": "APNS",
        "Address": "=ABAQRuUDJD ... <some longish binary value> j0eL+69lsY=",
        "EndpointStatus": "ACTIVE",
        "Location": {
            "Country": "US"
        },
        "Demographic": {
            "Make": "iPhone",
            "Model": "iPhone X",
            "ModelVersion": "13.1.3",
              ...
            "Platform": "ios"
        },
        "User": {
            "UserId": "us-east-1:<Cognito ID of the user that logged in>",
            "UserAttributes": {}
        },

        ... <snipped for brevity> ...

    },
    "awsAccountId": "<my account ID>"
}

上述字段中的用户电子邮件地址"Address"不以纯文本形式包含在 Kinesis Data Stream 事件中,而是以某种方式编码(或加密?)。

我的问题:谁能告诉我它是如何编码/加密的?而且,理想情况下,如何获取纯文本地址?

我尝试使用我的默认AWS KMS密钥(及其组合)base64对其进行解码或解密,但没有运气。

或者,我可以使用(纯文本)用户 ID 在用于管理身份验证和身份验证的AWS Cognito用户池中查找电子邮件地址,但直接从事件中获取它显然要简单得多......

我在gitterAWS-Amplify上的频道中进行了上下搜索,但似乎没有任何地方记录编码/加密......Address

4

0 回答 0