【问题标题】:AWS Cognito user pool OAuth REST API call examples exist?AWS Cognito 用户池 OAuth REST API 调用示例是否存在?
【发布时间】:2018-01-31 09:22:23
【问题描述】:

感觉就像亚马逊在鼓励人们只使用他们的客户端 SDK,但很高兴看到授权和隐式授权流的一系列有效 REST 调用是什么样的。

授权和令牌端点的 AWS 文档是一个不错的开始: http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html

是否有人知道是否存在一些示例来显示隐式和授权流的 REST 调用序列(针对 Cognito)?

【问题讨论】:

    标签: oauth-2.0 amazon-cognito aws-cognito


    【解决方案1】:

    文档有点粗制滥造,但这里有一个 PHP cURL 调用示例,用于使用授权流程的授权代码获取 ID/访问令牌:-

    $url = 'https://<YOURDOMAIN>.auth.us-east-1.amazoncognito.com/oauth2/token';
    $client_key = '<YOUR_CLIENT_ID>';
    $client_secret = '<YOUR_CLIENT_SECRET>';
    
    $data = [       'grant_type' => 'authorization_code',
                    'client_id'=>$client_key, 'code'=>$_GET["code"],
                    'redirect_uri'=>'<YOUR_REDIRECT_URI>'];
    
    $handle = curl_init($url);
    curl_setopt($handle, CURLOPT_VERBOSE, true);
    curl_setopt($handle, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($handle, CURLOPT_USERPWD, $client_key . ":" . $client_secret);
    curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
    $field_string = http_build_query($data);
    curl_setopt($handle, CURLOPT_POSTFIELDS, $field_string);
    $resp = json_decode(curl_exec($handle),true);

    获得 ID 令牌后,您需要从中解析 JWK JSON 文件

    https://cognito-idp.us-east-1.amazonaws.com/<USER_POOL_ID/.well-known/jwks.json
    

    然后在令牌头中查找kid字段,并将其用作解码令牌的秘密。我使用了这个库:- https://github.com/firebase/php-jwt

    所以令牌验证代码看起来像:-

    $jwks_json = file_get_contents("https://cognito-idp.us-east-1.amazonaws.com/<USER_POOL_ID>/.well-known/jwks.json");
    $jwk = JWK::parseKeySet($jwks_json);
    
    $tks = explode('.', <YOUR_TOKEN>);
    list($headb64, $bodyb64, $cryptob64) = $tks;
    $jwt_header = json_decode(base64_decode($headb64),true);
    $jwt_body = json_decode(base64_decode($bodyb64),true);
    $key=$jwk[$jwt_header["kid"]];
    
    try
    {
        $decoded = JWT::decode(<YOUR_TOKEN>, $key, array($jwt_header["alg"]));
        $decoded_array = (array) $decoded;
        // GREAT SUCCESS!
    }
    catch (\Exception $e)
    {
        // TOKEN COULDN'T BE VALIDATED
    }

    【讨论】:

    • 获得访问令牌或孩子后,如何使用这些来使用户 UpdatrAttribute 休息调用?认证后请求中需要传递哪些信息才能对用户数据进行各种操作?
    【解决方案2】:

    我不知道它有什么很好的记录。我认为您最好的选择是使用其中一个 SDK 启动测试应用程序并监控网络流量。 API似乎没有很好的记录。

    【讨论】:

      猜你喜欢
      • 2016-10-14
      • 2021-02-04
      • 1970-01-01
      • 2021-08-28
      • 2020-05-28
      • 2019-07-02
      • 2021-09-05
      • 2022-01-15
      • 2018-09-06
      相关资源
      最近更新 更多