当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda验证手机app发送的用户令牌?

闾丘康安
2023-03-14

我正在使用Amazon Mobile Hub构建一个移动应用程序。我在MobileHub中使用AWS Cognito对注册和登录的用户进行身份验证。我现在正在尝试使用AWS Lambda与DynamoDB通信来执行一些操作。

在这样做的时候,我偶然发现了一个问题,那就是我不确定如何验证一个用户。从某种意义上说,如果我通过云逻辑将访问令牌发送给我的Lambda函数,我将如何验证该令牌并使用从该令牌中检索的用户名继续我的操作呢?

该SDK允许Lambda函数与AWS Cognoto功能进行通信,但我没有找到任何有用的函数来实际验证令牌。https://github.com/aws/amazon-cognito-identity-js

共有2个答案

秦才
2023-03-14

因此,在使用Cognoto进行授权时,有两个选项。

1)您可以将Cognito Authorizer附加到API,它“只是工作”,在引擎盖下Cognito验证令牌。您对授权过程没有太多控制,基本上要么是肯定的,要么是否定的。

2)正如prateek所说,你可以使用自定义授权器,有点像这样的东西,注意:我已经把密钥放在代码中,这是一个非常糟糕的主意,你应该把它存储在一个环境变量KMS加密。

import jwt from 'jsonwebtoken'

export default (event, context, callback) => {

    const key = '' // <--- YOU GET THIS KEY FROM https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json.
    jwt.verify(event.authorizationToken, key, (err, decoded) => {
        if (err) {
            console.log('JWT VALIDATION ERROR')
            callback(null, responder.unAuthorised())
            return
        }

        const principalId = decoded.user.username

        const apiOptions = {}
        const tmp = event.methodArn.split(':')
        const apiGatewayArnTmp = tmp[5].split('/')
        const awsAccountId = tmp[4]
        apiOptions.region = tmp[3]
        apiOptions.restApiId = apiGatewayArnTmp[0]
        apiOptions.stage = apiGatewayArnTmp[1]
        const method = apiGatewayArnTmp[2]
        let resource = '/' // root resource
        if (apiGatewayArnTmp[3]) {
            resource += apiGatewayArnTmp[3]
        }

        const policy = new AuthPolicy(principalId, awsAccountId, apiOptions)

        // DENY
        policy.denyMethod(AuthPolicy.HttpVerb.POST, "/someEndpoint")

        // PERMIT
        policy.allowMethod(AuthPolicy.HttpVerb.POST, "/someEndpoint")    

        const authResponse = policy.build()

        // YOU CAN EMBED ANYTHING ELSE YOU WANT TO ADD LIKE SO:
        authResponse.context = {
            username: decoded.username,
            someKey: someInfo,
        }

        callback(null, authResponse)

    }) //  jwt.verify(
}

我不记得科尼托在它的令牌中放了什么声明,但是在你jwt.verify控制台记录解码的令牌之后,你会从你的用户池中看到一大堆信息,然后你可以在authResponse.context中传递这些信息,它会出现在你event.requestContext.authorizer.下的lambda中

请记住,标识令牌将包含来自用户池的信息。

濮阳振
2023-03-14

您可以在AWS apigateway中使用自定义授权器来授权API请求。访问权标可以作为所有认证API的请求报头发送,且当它到达API网关时,定制授权器逻辑将调用,因此λ函数将调用,并且访问权标可以被验证。这是自定义授权者的例子。

 类似资料:
  • 我有带有azure ad b2c的前端(https://github.com/Azure-Samples/ms-identity-b2c-javascript-spa)。用户登录后,azure AD返回SPA令牌。我使用此访问令牌调用springbooapi。 我的springboot应用程序如何验证acess令牌并使用此令牌从azure ad b2c获取用户信息。 谢谢

  • X2.3.0新增(暂时无法使用) sp_check_mobile_verify_code($mobile='',$verifycode='') 功能: 手机验证码检查,验证完后销毁验证码增加安全性 参数: $mobile: 手机号 $verifycode:验证码 返回: 类型boolean true:手机验证码正确,false:手机验证码错误 使用: $is_right_mobile_code

  • 接口说明 用来验证输入的手机号是否已注册 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/user/1.0.0/validatePhone 是否需要登录 否 请求字段说明 参数 类型 请求类型 是否必须 说明 phone string form 是 手机号 响应字段说明 参数 类型 说明 phoneVali String

  • 本文向大家介绍Js实现手机发送验证码时按钮延迟操作,包括了Js实现手机发送验证码时按钮延迟操作的使用技巧和注意事项,需要的朋友参考一下 实例代码记录:

  • 问题内容: 我正在Google App Engine上开发应用程序。我在Google App Engine的后端使用Cloud Endpoints进行Android App之间的通信。Android客户端使用Firebase身份验证,并在每次调用Firebase令牌时发送Cloud Endpoints。 在Google App Engine中,我使用以下代码来验证Firebase令牌。我正在使用F

  • 本文向大家介绍手机号码验证方法(正则验证),包括了手机号码验证方法(正则验证)的使用技巧和注意事项,需要的朋友参考一下 只允许输入数字 下面看下最新手机号码验证正则表达式 由于手机号段的不断更新,以前的正则表达式已经无法满足需求。重新编写这条表达式,号段资料来源依据:http://www.jihaoba.com/tools/haoduan/ 现有手机号段: 移动:139   138   137