Javascript 自动登录子域Amazon Cognito标识

Javascript 自动登录子域Amazon Cognito标识,javascript,amazon-web-services,amazon-cognito,aws-cognito,Javascript,Amazon Web Services,Amazon Cognito,Aws Cognito,我使用Amazon Cognito Identity SDK for JavaScript在www.mydomain.com上登录我的用户 我想知道是否有可能让我的用户自动登录store.mydomain.com 据我所知,Cognito将logintoken和其他东西存储在localstorage中,而这些东西是无法从子域访问到的?Amazon Cognito Identity SDK For JavaScript的令牌确实存储在本地存储中。但是,如果您使用Cognito托管的UI和下面链接的

我使用Amazon Cognito Identity SDK for JavaScript在www.mydomain.com上登录我的用户

我想知道是否有可能让我的用户自动登录store.mydomain.com


据我所知,Cognito将logintoken和其他东西存储在localstorage中,而这些东西是无法从子域访问到的?

Amazon Cognito Identity SDK For JavaScript的令牌确实存储在本地存储中。但是,如果您使用Cognito托管的UI和下面链接的Cognito Auth SDK,则可以管理SSO

其工作方式是,如果您将令牌存储在域的本地存储上,则可以登录。否则,您点击我们的登录端点,如果有一个cookie存储在它上面,您将在响应中获得令牌,这些令牌将存储在本地存储中,并且可以通过Amazon Cognoto Identity SDK访问(因为它们存储在同一个位置)


AWS Cognito JS SDK默认使用LocalStorage存储身份验证令牌。您可以更改此行为并使用cookies存储令牌。然后,您可以在设置cookie时使用父域名,并且您的所有子域都可以访问此cookie

要实现这一点,您可以在创建对象时使用JSSDK中的

键入下面的脚本代码片段

可以找到完整的实现。可以查看正在运行的应用程序

验证用户身份(在主域上,例如example.com上)-

sign(电子邮件:string,密码:string):可观察{
让userPool=newcognitouserpool({
UserPoolId:environment.\u USER\u POOL\u ID,
客户端ID:环境。\u客户端\u ID,
存储:新CookieStorage({secure:false,domain:“example.com”}),
});
让authenticationDetails=新建authenticationDetails({
用户名:email,
密码:密码,
});
让用户数据={
用户名:email,
池:userPool,
存储:新CookieStorage({secure:false,domain:“example.com”}),
};
让cognitoUser=newcognitouser(userData);
返回可观察的。创建((观察者:观察者)=>{
cognitoUser.authenticateUser(authenticationDetails{
onSuccess:result=>{
下一步(结果);
observer.complete();
},
onFailure:error=>observer.error(error),
});
});
}
检查用户是否经过身份验证(在子域上,例如sub.example.com上)

isAuthenticated():可观察{
让userPool=newcognitouserpool({
UserPoolId:environment.\u USER\u POOL\u ID,
客户端ID:环境。\u客户端\u ID,
存储:新CookieStorage({secure:false,domain:“example.com”}),
});
让cognitoUser=userPool.getCurrentUser();
if(cognitoUser!=null){
返回可观察的。创建((观察者:观察者)=>{
cognitoUser.getSession((错误,会话)=>{
如果(错误){
控制台错误(error);
观察者:下一个(假);
observer.complete();
}
log(session,session.isValid(),session.isAuthenticated);
observer.next(session.isValid());
observer.complete();
});
})
}
signIn(email: string, password: string): Observable<any> {
    let userPool = new CognitoUserPool({
       UserPoolId: environment._USER_POOL_ID,
       ClientId: environment._CLIENT_ID,
       Storage: new CookieStorage({secure: false, domain: "example.com"}),
    });
    let authenticationDetails = new AuthenticationDetails({
      Username: email,
      Password: password,
    });

    let userData = {
        Username: email,
        Pool: userPool,
        Storage: new CookieStorage({secure: false, domain: "example.com"}),
    };
    let cognitoUser = new CognitoUser(userData);
    return Observable.create((observer: Observer<any>) => {
      cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: result => {
          observer.next(result);
          observer.complete();
        },
        onFailure: error => observer.error(error),
      });
    });
}
isAuthenticated(): Observable<boolean> {
    let userPool = new CognitoUserPool({
       UserPoolId: environment._USER_POOL_ID,
       ClientId: environment._CLIENT_ID,
       Storage: new CookieStorage({secure: false, domain: "example.com"}),
    });
    let cognitoUser = userPool.getCurrentUser();
    if (cognitoUser != null) {
      return Observable.create((observer: Observer<boolean>) => {
        cognitoUser.getSession((error, session) => {
          if (error) {
            console.error(error);
            observer.next(false);
            observer.complete();
          }
          console.log(session, session.isValid(), session.isAuthenticated);
          observer.next(session.isValid());
          observer.complete();
        });
      })
}