ååã®è¨äºã®ã¨ãã、AWSã®SDKããã©ã¦ã¶ç¨JavaScriptã§å©ç¨ã§ããããã«ãªã£ã。
ä»åã¯å®éã«è©¦ãã¦å©ç¨ã§ããããã«ãªã£ãã¾ã§ã®æé ãè¨ã。
ã¡ãªã¿ã«æ¤ç´¢ãã¦ãæ¥æ¬èªã®æ
å ±ã¯ãããè±èªã®æ
å ±ãããã¾ãè¦ã¤ããã、ç·å½ãçã«è©¦è¡é¯èª¤ã¦ãã、ã¾ãDynamoDBãã®ãã®ã¨ãGoogleã®èªè¨¼å¨ãã¯ä»ã²ã¨ã¤ããã£ã¦ããªãã®ã§、æé ã«ã¯ç¡é§ãééã£ãç®æããããããããªã。ãã®ãããã¯åèªã§ä¿®æ£ãã¦ããã ããã。(ããã¦åºæ¥ãã°ç§ã«ãæãã¦ã»ãã)
ä»åãããã¨ã¯、Googleã§èªè¨¼ãåãã¦、ãã®èªè¨¼ãã¼ã¯ã³ã使ã£ã¦DynamoDBã«æ¥ç¶ãã¦、ãã¼ã¿ãåå¾・è¨å®ãã。å©ç¨ã®æ³å®ã¯Googleã®ã¦ã¼ã¶ã¼IDãã¨ã«jsonããªã«ãã®æååãä¿åãã¦ããåç´ãªã¢ããªã±ã¼ã·ã§ã³ã¨ãã。
ã¯ã©ã¤ã¢ã³ãå´ã§ã®å¤§ã¾ããªæµãã¨ãã¦ã¯、Googleã§ãã°ã¤ã³ãã¦ããã£ã¦ããããè¿ãããid_tokenããGoogleã®user_idãåå¾ãã。AWSã®DynamoDBã®ãã¼å¤ã¯ãã®user_idã«ãã。DynamoDBã¨ã®ã¢ã¯ã»ã¹æã«ä¸ç·ã«id_tokenã渡ããã¨ã§AWSå´ã§ãuser_idãæ£ãããã¨ãç
§åãã、èªåã®user_idããã¼ã®ãã¼ã¿ã®ã¿ã«ã¢ã¯ã»ã¹ã§ããããã«ãªã。
å©ç¨ã¾ã§ã®æé ã¨ãã¦ã¯ä»¥ä¸ã®ãããªæµãã«ãªã。
- Googleã«ã¢ããªã±ã¼ã·ã§ã³ç»é²ããã
- AWSã§DynamoDBã«ãã¼ãã«ãä½æãã
- DynamoDBã§Webèªè¨¼ã®ã¨ãã®ããªã·ã¼ãä½æã§ããã®ã§ä½ã£ã¦ã³ãã¼ãã¦ãã
- AWSã§IAMã«DynamoDBã«ã¢ã¯ã»ã¹ã§ããRoleãä½æãã(3ã®ããªã·ã¼ã使ã)
- ãã©ã¦ã¶ä¸ã§DynamoDBã«æ¥ç¶ããã¢ããªã±ã¼ã·ã§ã³ãä½æãã
ã§ã¯ã²ã¨ã¤ãã¤èª¬æãã¦ãã。
1.Googleã«ã¢ããªã±ã¼ã·ã§ã³ç»é²ããã
Google APIs Console
Google Cloud Console
ä¸è¨ãªã³ã¯ã®ã©ã£ã¡ã§ãè¯ã(ä¸ã®æ¹ãæ°ãã)。
ãããã¯æ¬æ¥Googleã®API(å°å³ã¨ãã«ã¬ã³ãã¼ã¨ã)ãå©ç¨ç³è«ããç»é¢ãªã®ã ãã©、ä»åã¯ãã°ã¤ã³ãå©ç¨ããã ããªã®ã§ç»é²ã®ã¿ã§ï¼¯ï¼«。é©å½ã«ç»é²ããã¨API Accessã¨ãã®æ¬ã«Client IDãããã®ã§ãããè¨é²ãã¦ãã。****.apps.googleusercontent.comã¿ãããªãã¤。****.projectã¨ãããã¤ã¯éãã®ã§æ°ãä»ãã。Client Secretã¯ä½¿ããªã。
ã¡ãªã¿ã«ä¸ã®æ¹ã¯Google App Engineãªããã®ããã¸ã§ã¯ãã¨ãçµ±åããã¦ãã¦、ãã®è¨å®ãè¡ãã。
ãã®ãããã¯ãã¶ãã°ã°ãã°ã©ãã ãã§ãæ
å ±ãããã®ã§çç¥。
2.AWSã§DynamoDBã«ãã¼ãã«ãä½æãã
ãµã¤ãã«Create Tabelã§ä½æãã。
ã°ã°ãã°(ç¥)
ã¹ã«ã¼ããããå
¨Tableåè¨ã§write:5/read:10以ä¸ã«è¨å®ããã¨、æéå価ãææã«ãªãã®ã§æ°ãä»ãã(åãã¦ä½ããªãã©ã£ã¡ã1ã«ãã¦ããã°å¤§ä¸å¤«)。
3.DynamoDBã§Webèªè¨¼ã®ã¨ãã®ããªã·ã¼ãä½æã§ããã®ã§ä½ã£ã¦ã³ãã¼ãã¦ãã
ãã。
Identity ProviderãGoogleã«ãã¦、権éãããããå¦çã«ãã§ãã¯ããã。
Allowed Attributesã£ã¦ã®ã§åå¶éãã§ããã¿ãã。
ããã§è¨å®ããããã§ã¯ãªãPolicy Documentã®æ¬ã®è¨å®å¤ãã³ãã¼ãã¦ãã。
ãã£ããè¨å®ã«è§¦ããã¨、dynamodb:LeadingKeysã${accounts.google.com:sub}ã«ãªã£ã¦ããã®ã§、ãã¼å¤ãgoogleã®sub(ã¦ã¼ã¶ã¼ID)ã¨ä¸è´ããã¨ãã®ã¿æ¨©éãä¸ããããããã«ãªã£ã¦ãã。
id_tokenã¯googleã®ã¨ã³ããã¤ã³ãã«æããã¨ã¦ã¼ã¶ã¼ID、ã¢ããªã±ã¼ã·ã§ã³IDçã
ãè¿ãããã®ã§、æ£ããã¢ããªã±ã¼ã·ã§ã³ã§ãããã©ããã¨ã、æ£ããã¦ã¼ã¶ã¼IDã§ãããã©ãããåããã®ã§AWSå´ã§ç
§åãã¦ããã¦ãã£ã½ã。
4.AWSã§IAMã«DynamoDBã«ã¢ã¯ã»ã¹ã§ããRoleãä½æãã(3ã®ããªã·ã¼ã使ã)
IAMã®ãµã¼ãã¹ã«ã¢ã¯ã»ã¹ãã¦Roleãä½æãã。
é©å½ãªRoleåãã¤ãã。
ä¸çªä¸ã®ãé¸ã¶。
Googleãé¸æãã¦Audienceã« Client IDãè¨å®ãã。
ããã§ãã¨ã§æ¸¡ãtokenãä»ã®ã¢ããªã«çºè¡ããããã®ãããªããã¨ã確èªããã。
確èªãã¦æ¬¡ã¸。
ãã£ãã®ããªã·ã¼ãå
¥ããããã«Custom Policyãé¸æãã。
ï¼ã§ä½æããããªã·ã¼ãã³ãããã。
å®äº。
ãã¨ã§ä½¿ãã®ã§ãã®Roleã®SummaryããRole ARNãã¡ã¢ã£ã¦ãã。
ãããªæãã®ãã¤。
arn:aws:iam::(æ°å):role/(Roleå)
5.ãã©ã¦ã¶ä¸ã§DynamoDBã«æ¥ç¶ããã¢ããªã±ã¼ã·ã§ã³ãä½æãã
Googleããåå¾ããå¿
è¦ãããã®ã¯、id_tokenã¨ããJWTã£ã¦ããJSONã®æ
å ±ãã¾ã¨ãã¦ç½²åãã¦ããã(ããç¥ããªã)ã¨、Googleã®user_idã®äºã¤。
id_tokenã¯Googleã®ã¨ã³ããã¤ã³ãã«æ¸¡ãã¨ãã®ãã¼ã¯ã³ãã©ã®ã¢ããªã±ã¼ã·ã§ã³IDã«å¯¾ãã¦çºè¡ããããã®ãã¨ã、ã©ã®user_idã«å¯¾ãããã®ã§ããã¨ã、æå¹æéã¯ãã¤ã¾ã§ã ã¨ãåããã®ã§ãã®è¾ºã§æå¹ãªèªè¨¼æ
å ±ãAWSå´ã§ç
§åããã®ã«å©ç¨ããã¦ãã£ã½ã。
user_idã¯DynamoDBã«æ ¼ç´ããã¨ãã®ãã¼ã¨ãã¦ä½¿ããã¨ã«ãªã。
ããã¾ã§ã®æé ãééããªãåºæ¥ã¦ãããªã、DynamoDBã«ã¯ãã®id_tokenã§ç¢ºèªãããuser_id以å¤ã®ãã¼ãåãå
¥ããªãããã«ãªã£ã¦ãã。
id_tokenã¨user_idãåå¾ããæ¹æ³
ããã«ã¯èª¿ã¹ãéããµãã¤ã®æ¹æ³ããã£ã¦、楽ãªãã ãã©ä»ã²ã¨ã¤å¾®å¦ãªGoogle+ãã¿ã³ã使ãæ¹ã¨、é¢åã ãã©ã¡ããã¨å¶å¾¡ã§ããGoogle APIã®JavaScriptã©ã¤ãã©ãªã使ãæ¹æ³ããã。å¤åå
é¨çã«ã¯åãæé ãè¸ãã§ãã¯ã。
ã©ã¡ãã®å ´åãä¸ã®æé ã§åå¾ãã¦ãããClient IDã¨、ã¦ã¼ã¶ã¼ã«ã©ãã¾ã§ã®æ¨©éãè¦æ±ãããã¨ãããã¨ã決ããscopeã¨ãããã®ãç¨æããå¿
è¦ããã。ããã§ã¯ã¦ã¼ã¶ã¼ã®åºæ¬çãªæ
å ±(ã¦ã¼ã¶ã¼IDã®çªå·ã¨ã¢ã«ã¦ã³ã)ã ããè¦æ±ããæä½éã®ãã®ã«ãã。
ãã®å ´å以ä¸ã®ãããªã¢ãã¬ã¹ãscopeã«è¨å®ãã。
https://www.googleapis.com/auth/userinfo.profile
åscopeã®è¦æ±æã«è¡¨ç¤ºãããç»é¢ãªããã¯ä»¥ä¸ã®ã¢ãã¬ã¹ã§ç¢ºèªã§ãã。
OAuth 2.0 Playground
ã¡ãªã¿ã«ä¸è¨ã®ãµã¤ãã¯Googleèªè¨¼ã®OAuth2.0ã®æé ã追ã£ããããããµã¤ããªã®ã§、ä½ãèµ·ãã¦ãã®ãã¨ãå
¨ãåãããªããªãè²ã
ããããåãã¨è¯ãã¨æã。
ã§、話ãæ»ãã¦èªè¨¼ã«ã¯Google+ãã¿ã³ã使ãå ´åã¨ç´æ¥ããå ´åã¨ãã。ãã 調ã¹æ¹ãæªãã®ã、ãã¨ãã¨ãããããããªã®ã、+ãã¿ã³ã使ãå ´å、ä¸è¨ã®scopeã常ã«Googe+ API v1ã®loginãè¦æ±ãã権éãè¦æ±ããã¦ãã¾ã。Google+ãå©ç¨ãããã¨ããªãã®ã§åãããªãã、ãã¶ãtwitterã§è¨ãã¨[ä»ä½ã
ããã¬ã¤ãã¦ã¾ã!]ã¿ãããªãã®ãèªåã§ã¤ã¶ããããããã«ä½¿ããããªæ¨©éã ããã¨æã。facebookã§è¨ãã¨ã¦ã©ã¼ã«ã«è¼ããã©ããã¿ãããªããã ãã(facebookã使ã£ããã¨ããªãã®ã§ãã®ãã¨ããæ£ããã®ããç¥ããªã)scopeã§è¨ãã¨、https://www.googleapis.com/auth/plus.loginã®ãã¤ãããã 。
+ãã¿ã³ã£ã¦è¨ã£ã¦ããã ã、ãã¶ããã¨ãã¨ãããããããªãã ãã。
ä¸ã®userinfo.profileã§è¦æ±ããã¨、+å
ã§ã®ã¦ã¼ã¶ã¼æ
å ±ã¨、+ã®ãµã¼ã¯ã«ã«ç¥ããã権éã¨、Googleã®æ
å ±ã¨ããªãã®ã§è¦æ±ãå¤ãã¦æ¬é ãããããªæãããã。ãã¨ãã°ã¤ã³æ¸ã¿ã®å ´å、åæã«ç»é¢ã«ãã¼ã¹ãã表示ããããæ¶ãæ¹æ³ãåãããªãã¦å«ã ã£ãã®ã§ä½¿ããªãã£ã。
ãã 、Google+ã®ã¦ã¼ã¶ã¼ã§ãã®æ¹é¢ã§å
±æãã¦æ¬²ããã¨æããªã、使ãæ¹ã¯ç°¡åãªã®ã§ããããã 。Googleããã¹ããã¦ãJavaScriptã®ãã¡ã¤ã«ããã¼ããã¦、spanã«æ±ºã¾ã£ãã¯ã©ã¹ãdataå±æ§ã§ã¢ããªã±ã¼ã·ã§ã³æ
å ±ãªãããè¨å®ããã ãã§id_tokenãå«ãã ãã¼ã¿ãcallbackã«å¸°ã£ã¦ãã。
以ä¸ã«æ¥æ¬èªã§å
¬å¼ããã¥ã¡ã³ããããã®ã§èªãã°ããã«ä½¿ãã。
Google Platform — Google Developers
user_idã«é¢ãã¦ã¯、æé ãå
±éãªã®ã§ã©ã¤ãã©ãªãç´æ¥æä½ãã¦id_tokenãåå¾ããæ¹æ³ã®ãã¨ã«æ¸ã。
Google+ãã¿ã³ã使ããªãæ¹æ³
ã¨ããããã§ã©ã¤ãã©ãªã®ä½¿ãæ¹。ã±ã¡ã±ã¡。
ã¡ãªã¿ã«+ãã¿ã³ã使ããªãã¨ãã§ã、
Google+ãã¿ã³ã¬ã¤ãã©ã¤ã³ã¿ãããªãã®ããã£ã¦、ããã«æºæ ããªãããªããªãã®ãæ©ãã¨ããã ãã©、ä½åº¦ãèªã¿è¿ãã¦ãããã¯Google+ã®é£æºã¢ããªã¨ãã¦ä½æããã¨ãã¯ã£ã¤ã話ã£ã½ãã®ã§å¤å大ä¸å¤«ã ã¨æã。+ã®æ¨©éã使ããªãéµå®ãã¹ã。
ã§æ¬é¡。
Google JavaScript API - Google Platform — Google Developers
JavaScript Client Library Reference - Google APIs Client Library for JavaScript (Beta) — Google Developers
ãã®ãããã®ãªãã¡ã¬ã³ã¹èªãã°åãã(ããã)。
ãªã®ã ãã©、ä¸å¿ã²ã£ããããã¤ã³ããããã®ã§ãµã³ãã«。
gapi.auth.authorize({
client_id:"******.apps.googleusercontent.com"
,immediate:true
,response_type:"token id_token"
,scope:"https://www.googleapis.com/auth/userinfo.profile"
},function(response){
if(response && response.access_token){
//ãã°ã¤ã³ã§ããã¨ãã®å¦ç
}else{
//ãã°ã¤ã³ã§ããªãã£ãã¨ãã®å¦ç
}
});
ä¸è¨ã®å¼æ°ã§ä¸çªéè¦ãªã®ã¯response_typeã«"token id_token"ã¨ãã風ã«id_tokenã¨tokenã®ã©ã£ã¡ãæå®ãããã¨。tokenã¯ãã¨ã§user_idãåãåãããã¨ãã«ä½¿ã(ãã¶ãid_tokenã§åãåããããã¨ãåºæ¥ãã¨æããã ãã©èª¿ã¹ã¦ãªã)。ã¡ãªã¿ã«æå®ããªãã¨tokenã«ãªãã¿ããã§id_tokenãåå¾ã§ããæ©ãã 。
immediateã¯é£æºè¨±å¯ã®ç»é¢ãåºããå¦ãã¨ãããã©ã°ã§、falseã®å ´å、é£æºã®æç¡ã«é¢ä¿ãªãé£æºè¨±å¯ã®ç»é¢ããããã¢ãããã。ãã æ¢ã«é£æºã®è¨±å¯ããã£ãå ´å、ãããã¢ããã¯ã¡ããã¨è¦ãã¦ããæ¶ãã。ããã¦ä¸è¨ã®ãã°ã¤ã³ã§ããã¨ãã®å¦çãæµãã。許å¯ãç¡ããã°、ãããã¯ãã°ã¤ã³ãã¦ããªããã°ãã®ç»é¢å
ã§ãã°ã¤ã³|æ¿èªãåããããã°ãã°ã¤ã³ã§ããã¨ãã®å¦çãæµãã。
trueã®å ´å、é£æºã®æç¡ã«é¢ä¿ãªã、ãããã¢ããã¯è¡¨ç¤ºãããªã。é£æºããããã°ã¤ã³ãã¦ããã°åçç¡ç¨ã§ãã°ã¤ã³å¦çã«ç§»è¡ã、ããã§ãªããã°ã§ããªãã£ãã¨ãã®å¦çãè¡ããã。ä¸é·ä¸çã§ãã。
ã¤ã¾ããã°ã¤ã³ã®å¦çãã¾ã£ã¨ãã«ãããã¨ããã¨、gapi.auth.authorizeã¯immediateãã©ã°ãtrueã§æµããã®ã¡、ãã°ã¤ã³ã§ããªãã£ããfalseã§æµãç´ãã、ãã°ã¤ã³ãã¿ã³ã表示ãã¦æ¼ããããfalseã§å®è¡ãããããªå½¢ã«ãã¹ããªã®ã ã¨æã。
ããããã¨èªè¨¼æ¸ã¿ã¦ã¼ã¶ã¼ã¯ã·ã¼ã ã¬ã¹ã«、æ°è¦ã¦ã¼ã¶ã¼ã¯æ¿èªç»é¢ã«ç§»è¡ã§ãã。
user_idãåå¾ãã
ã§、ä¸è¨ã®ã©ã¡ããã®æ¹æ³ã§id_tokenã¨access_tokenãåå¾ã§ããã¯ãã 。
ãããããã®tokenã£ã¦ä½ã®tokenãã¨ããã¨é£æºè¨±å¯ãåãããã¼ã¿ã«ã¢ã¯ã»ã¹ããããã®tokenãªã®ã§、ãã®tokenãèªåã許å¯ãåãã権éã§è¦æ±å¯è½ãªã¨ã³ããã¤ã³ãã«æãã¦ããã°å¿
è¦ãªæ
å ±ãæã«å
¥ã(å¿
è¦ãªæä½ãè¡ãã)ã¨ãã寸æ³ã§ãã。
ãããä¸è¨ã®ãªãã¡ã¬ã³ã¹ã«è¼ã£ã¦ããã®ã ãã©、ãµã³ãã«ã¯ãããªæã。
var request = gapi.client.request({
'path':'/oauth2/v2/userinfo'
,'params': {key:/*åå¾ããaccess_token*/}
});
request.execute(function(userinfo){
/*user_idãå©ç¨ããå¦ç*/
});
#callbackã°ã£ããã§ãã¹ããæ·±ããªããããªãdeferã使ãã(jQueryã ã¨Deferred)
ãã£ã¨AWS SDK for JavaScriptãããã
AWS SDK for JavaScript in the Browser
ãã£ã¨èªãã°ã ããã大ä¸å¤«。
ã¾ãhttps://sdk.amazonaws.com/js/aws-sdk-2.0.0-rc1.min.jsãsdkãªã®ã§scriptã¿ã°ã§ãã¼ããã¦ãã。
ããã§ãµã³ãã«ã¯ãããªæã。
AWS.config.credentials = new AWS.WebIdentityCredentials({
RoleArn: "arn:aws:iam::*******:role/TestRole"
,WebIdentityToken: id_token
});
AWS.config.region = "ap-northeast-1";
var DB = new AWS.DynamoDB();
//å¤ãå
¥ãã
DB.putItem({
TableName:"TestTable"
,Item:{user_id:{S:user_id},data:{S:"TEST"}}
},function(response){
//ã¨ã©ã¼ãããã°responseã«å
¥ã
});
//å¤ãåãåºã
DB.getItem({
TableName:"TestTable"
,Key:{user_id:{S:user_id}}
},function(response,data){
//ãã¼ã¿ã«åãåºããå¤ãå
¥ã
});
AWS.configã«è¨å®ãã¦ããã¨S3ã¨ãDynamoDBã¨ãã§å
±éã®ãªã¼ã¸ã§ã³ã¨ãèªè¨¼æ
å ±ã使ããæã。RoleArnã«Roleãä½ã£ãã¨ãã«ã¡ã¢ã£ã¦ãããArnãå
¥ãã¦、id_tokenã渡ãã¦、regionãè¨å®ããã°ãã¨ã¯ãã¼ãã«ãæä½ããã ã。
Itemã¨ãKeyã§DynamoDBå´ã«å¤ã渡ãã¦ããã¨ãã®Sã¨ãããååã®ããããã£ã¯ãã®å¤ã®ååã§Sã¯String、Nã¯Numberã¨ããããªæã。
ãã£ãã¼EC2ãªãã§DynamoDBã«ã¢ã¯ã»ã¹ã§ãã!