【问题标题】:Using Cognito Authentication with Elastic Load Balancer将 Cognito 身份验证与 Elastic Load Balancer 结合使用
【发布时间】:2020-04-12 11:43:42
【问题描述】:

我有一个使用 AWS Cognito 进行身份验证的 ReactJS 前端网站,它运行良好,我可以登录、启动、退出等。我的后端是一组在 AWS Fargate 的 Docker 容器中运行的 Java Web 服务都在弹性负载均衡器之后。

我注意到在 ELB 中,您可以将身份验证添加到侦听器,这将检查 jwt 令牌的 HTTP 标头并在转发到相关微服务之前对其进行身份验证。我遇到了一个问题,当我设置“身份验证...”规则时,它会返回一个错误,我需要添加一个客户端密码。我无法将客户端密码添加到我的 Cognito 设置中,因为我正在从 ReactJS 访问它,并且显然 Javascript 不适用于添加了客户端密码的 Cognito。

因此,如果我不能使用此方法,我需要某种方式在 HTTPS 请求到达我的 Java 微服务时对其进行身份验证。在我的 Java 服务中,感觉我需要以某种方式访问​​ AWS Cognito 来检查用户会话,但感觉不对。

任何想法应该如何工作?

谢谢

【问题讨论】:

  • 如何为 ALB 创建另一个应用程序客户端?,您的解决方案是什么?

标签: java reactjs amazon-web-services amazon-cognito amazon-elb


【解决方案1】:

您可以考虑使用pure JS 使用 AWS Cognito 进行身份验证,无需客户端密码(可选)。我确实创建了一个没有Client SecretApp Client,它确实有效。

参考:https://docs.aws.amazon.com/cognito/latest/developerguide/authentication.html

// Amazon Cognito creates a session which includes the id, access, and refresh tokens of an authenticated user.

var authenticationData = {
        Username : 'username',
        Password : 'password',
    };
    var authenticationDetails = new AmazonCognitoIdentity.AuthenticationDetails(authenticationData);
    var poolData = { 
        UserPoolId : 'us-east-1_ExaMPle',
        ClientId : '1example23456789'
    };
    var userPool = new AmazonCognitoIdentity.CognitoUserPool(poolData);
    var userData = {
        Username : 'username',
        Pool : userPool
    };
    var cognitoUser = new AmazonCognitoIdentity.CognitoUser(userData);
    cognitoUser.authenticateUser(authenticationDetails, {
        onSuccess: function (result) {
            var accessToken = result.getAccessToken().getJwtToken();

            /* Use the idToken for Logins Map when Federating User Pools with identity pools or when passing through an Authorization Header to an API Gateway Authorizer */
            var idToken = result.idToken.jwtToken;
        },

        onFailure: function(err) {
            alert(err);
        },

});

另外,由于你使用的是ReactJS,你可以试试Amplify

https://aws-amplify.github.io/docs/js/authentication

我了解,虽然您有这么多层,有时您想根据需要对其进行配置,但您可以尝试使用 AWS Lambda 为自己制作一个简单的身份验证功能。

【讨论】:

    猜你喜欢
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    • 2011-01-16
    • 1970-01-01
    相关资源
    最近更新 更多