2017-08-23 18 views
1

アマゾンがクライアントSDKを使用することを奨励しているように感じていますが、認可と暗黙的な認可フローについて、一連の有効なREST呼び出しがどのように見えるかはわかります。AWS CognitoユーザープールOAuth REST API呼び出しの例はありますか?

許可およびトークンエンドポイントのAWSのドキュメントがいいスタートです:いくつかの例は、RESTのシーケンスが(Cognitoに対する)暗黙的および承認フローを求め示す存在する場合 http://docs.aws.amazon.com/cognito/latest/developerguide/cognito-userpools-server-contract-reference.html

誰もが知っていますか?

答えて

2

ドキュメントは少し手抜きですが、ここでは例として、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);

あなたたらJWK JSONファイルを解析するために必要なIDトークンを持っています

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

トークンヘッドで子供フィールドを参照してくださいそれをトークンを解読する秘密として使用してください。私は、このライブラリを使用: - 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 
 
}

0

私はそれがうまく文書化されていることに気づいていません。あなたの最善の選択肢は、SDKの1つを使ってテストアプリを起動し、ネットワークトラフィックを監視することだと思います。 APIが十分に文書化されていないようです。

関連する問題