验证/确认来自 Rails 的 AWS Cognito 访问令牌

Gun*_*ter 1 ruby ruby-on-rails amazon-web-services amazon-cognito

我正在使用 React Native 构建一个移动应用程序。借助这个库https://github.com/AirLabsTeam/react-native-aws-cognito-js,我可以通过应用程序注册和登录用户,并且 Cognito 返回访问令牌到应用程序。

现在,应用程序将使用此令牌对 Rails 后端进行 api 调用。(对于每个 API 调用。)

1)Rails方如何验证token是否良好?

2)如何获取用户的电子邮件?

3)AWS有API端点吗?

4)有类似的例子吗?

谢谢

小智 7

无需转换为 pem,ruby gem 'jwt' 就可以解决问题:

aws_idp = Faraday.get('https://cognito-idp.{region}.amazonaws.com/{userPoolId}/.well-known/jwks.json').body
jwt_config = JSON.parse(aws_idp, symbolize_names: true)
JWT.decode(token, nil, true, {jwks: jwt_config, algorithms: ['RS256'] })
Run Code Online (Sandbox Code Playgroud)

发送到服务器的令牌是 id 令牌,您可以从 amplify JS lib 获取该令牌:

cognitoUser.signInUserSession.idToken.jwtToken
Run Code Online (Sandbox Code Playgroud)

如果解码通过且没有异常,则令牌已验证 确保检查 idp 中的算法是否确实是 RS256