Aws cognitor 用户注册 登录身份

利用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
   
    
    
    

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

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

Aws cognitor 用户注册 登录身份_第1张图片
image.png

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

Aws cognitor 用户注册 登录身份_第2张图片
image.png

Clientid 信息

Aws cognitor 用户注册 登录身份_第3张图片
image.png

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

Aws cognitor 用户注册 登录身份_第4张图片
image.png

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

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

Aws cognitor 用户注册 登录身份_第5张图片
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:为应用程序注册用户

Aws cognitor 用户注册 登录身份_第6张图片
image.png
  • 实现代码:
  var userData = {
            Username: 'apptest123x',
            Pool: userPool
        };
 var dataEmail = {
            Name: 'email',
            Value: '[email protected]'
        };
 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
  • 邮箱收到的验证码
Aws cognitor 用户注册 登录身份_第7张图片
image.png
  • 实现代码
 cognitoUser.confirmRegistration("840985", true, function(err, result) {
                    if (err) {
                        alert(err);
                        return;
                    }
                    console.log('call result: ' + result);
                });

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

Aws cognitor 用户注册 登录身份_第8张图片
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


    Aws cognitor 用户注册 登录身份_第9张图片
    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 用户注册 登录身份)