美文网首页
Aws cognitor 用户注册 登录身份

Aws cognitor 用户注册 登录身份

作者: vision_zhang | 来源:发表于2017-12-20 18:15 被阅读0次

    利用AWS 提供的cognitor 实现web端移动端的用户 注册 激活 登录 以及后台进行JWT 与JWK 的身份验证匹配

    用的Javascrip sdk 参考链接 http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/setting-up-the-javascript-sdk.html

    在这个链接提供的SDK下载渠道里面下载需要的几个js文件


    image.png
       <script src="/path/to/aws-cognito-sdk.min.js"></script>
        <script src="/path/to/amazon-cognito-identity.min.js"></script>
        <!-- optional: only if you use other AWS services -->
        <script src="/path/to/aws-sdk-2.6.10.js"></script>
    

    然后就可以根据文档一步步进行实现了

    用控制台为 JavaScript 应用程序创建用户池

    image.png

    下面是我创建好的用户池 信息

    image.png

    Clientid 信息

    image.png

    用户池创建好了 就创建一个联合身份 关联这个用户池

    image.png

    移动端跟WEB端所需要的环境 就配置好了

    步骤 2:在应用程序中创建一个用户池对象(这意思是帮你刚才创建的用户池信息 获取到)

    image.png
    • 具体代码:
    AWSCognito.config.region = 'us-east-1';
          
            var poolData = {
                UserPoolId: 'us-east-1_QCvfU0mg1',
                ClientId:'7c6ckhcg4g83u815c9pv0ojc8f'
               // endpoint:'apigateway.us-east-1.amazonaws.com'
            };
            var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
      
            var userData = {
                Username: 'apptest123x',
                Pool: userPool
            };
    

    步骤 3:为应用程序注册用户

    image.png
    • 实现代码:
      var userData = {
                Username: 'apptest123x',
                Pool: userPool
            };
     var dataEmail = {
                Name: 'email',
                Value: '158291434@qq.com'
            };
     var attributeList = [];
    var attributeuser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(userData);
    var attributeEmail = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserAttribute(dataEmail);
    attributeList.push(attributeuser);
     attributeList.push(attributeEmail);
    var cognitoUser;
    userPool.signUp('apptest123x', 'Apptest123!', attributeList, null, function (err, result) {
                if (err) {
                    console.log(err);
                    alert(err);
                    return;
                }
                console.log(result.user);
                cognitoUser = result.user;
                console.log('user name is ' + cognitoUser.getUsername());
            })
    

    步骤 4:为应用程序确认用户 会收到邮箱验证COde 调用确认API

    • 未进行认真的状态
    image.png
    • 邮箱收到的验证码
    image.png
    • 实现代码
     cognitoUser.confirmRegistration("840985", true, function(err, result) {
                        if (err) {
                            alert(err);
                            return;
                        }
                        console.log('call result: ' + result);
                    });
    

    步骤 5:让用户登录应用程序

    image.png
    • 代码实现
    
            var authenticationData = {
                Username : 'apptest123x', // your username here
                Password : 'Apptest123!' // your password here
            };
            var authenticationDetails =
                new AWSCognito.CognitoIdentityServiceProvider.AuthenticationDetails(authenticationData);
    
            var cognitoUser =
                new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
            cognitoUser.authenticateUser(authenticationDetails, {
                onSuccess: function (result) {
                    console.log('access token + ' + result.getAccessToken().getJwtToken());
                },
    
                onFailure: function(err) {
                    console.log(err)
                    //alert(err);
                },
                mfaRequired: function(codeDeliveryDetails) {
                    var verificationCode = prompt('Please input verification code' ,'');
                    cognitoUser.sendMFACode(verificationCode, this);
                }
            });
    
    • 获取到的JWTToken


      image.png

    登录调用AWS 的登录就可以获取到AccessToekn 的JWTToken 把这个JwtToekn 传给我们自己的服务端 根据对应的JWK 进行算法签名匹配

    • 后台获取到的JWK


      image.png
    • 后台进行签名验证后的结果

    {
        "sub": "18c7954d-7ee6-4586-a4d6-55f18f8c64d4",
        "event_id": "de2691d4-e560-11e7-a701-9951c60f2a98",
        "token_use": "access",
        "scope": "aws.cognito.signin.user.admin",
        "iss": "https://cognito-idp.us-east-1.amazonaws.com/us-east-1_QCvfU0mg1",
        "exp": 1513762586,
        "iat": 1513758986,
        "jti": "25143e7b-7705-4e99-9737-dcc7158ef0b9",
        "client_id": "7c6ckhcg4g83u815c9pv0ojc8f",
        "username": "apptest123x"
    }
    
    • 主要字段的意思
    根据JWT的标准,这些claims可以分为以下三种类型:
    a. Reserved claims(保留),它的含义就像是编程语言的保留字一样,属于JWT标准里面规定的一些claim。JWT标准里面定好的claim有:
    
    iss(Issuser):代表这个JWT的签发主体;
    
    sub(Subject):代表这个JWT的主体,即它的所有人;
    
    aud(Audience):代表这个JWT的接收对象;
    
    exp(Expiration time):是一个时间戳,代表这个JWT的过期时间;
    
    
    iat(Issued at):是一个时间戳,代表这个JWT的签发时间;
    
    jti(JWT ID):是JWT的唯一标识。
    
    

    相关文章

      网友评论

          本文标题:Aws cognitor 用户注册 登录身份

          本文链接:https://www.haomeiwen.com/subject/cufnwxtx.html