mixiãOpenIDã«å¯¾å¿ããã¨ãããã¨ã§æ©éGoogle App Engineã§å®è£
ãã¦ã¿ã。以åã®ã¨ã³ããªã§ç´¹ä»ãããGoogle App Engineã®ãµã³ãã«éã«OpenID Consumerã¨ããWebã¢ããªãããã®ã§、ãã®ã½ã¼ã¹ã³ã¼ããå©ç¨ããã¦ããã£ã。
ããã、å®éã«ä½¿ã£ã¦ã¿ãã°ãããã®ã ããã®ã³ã¼ãã«ã¯ããã¤ãã®ãã°(ã¨Google App Engineã®å¶é)ããã£ã¦ã¡ããã¨åããªã。ä¸è¨ã®ãªã³ã¯å ã¯æ£å¸¸ã«åãããã«ä¿®æ£ãããã®ã 。
mixi OpenID ãã¹ã
以ä¸ã«ãã°ã®ç®æã¨ãã®ä¿®æ£ã³ã¼ãã示ã。
consumer.py
344-345è¡ç®ã®ä»¥ä¸ã®ã³ã¼ãã
self.response.set_status(302) self.response.headers['Location'] = redirect_url
以ä¸ã®ããã«ä¿®æ£ãã。
self.response.out.write("<html><head><meta http-equiv=\"refresh\" content=\"0;url=%s\"></head><body></body></html>" % (redirect_url,))
ããã¯Google App Engineã®å¶éãåé¿ããããã§、ä¸åº¦HTMLã表示ãåæã«ãªãã¤ã¬ã¯ããè¡ã£ã¦ãã。
fetcher.py
以ä¸ã®57è¡ç®ããã®ã³ã¼ãã§、éã§ç¤ºããã³ã¼ãã®å¾ãã«ãã赤ã§ç¤ºããã³ã¼ããéã®ã³ã¼ãã®åã«ç§»åããã。
if body: method = urlfetch.POST if 'Content-Type' not in headers: headers['Content-Type'] = 'application/x-www-form-urlencoded' else: method = urlfetch.GET if not headers: headers = {}
ã¾ã、å¤é¨ã¢ã¸ã¥ã¼ã«ã®Python OpenID Library (openid)ã¨ElementTree (elementtree)ã¯ææ°ã®ãã®ã«å¤æ´ãã¦ãåé¡ãªãåã。
ãã¼ã«ã«ã§ãã¹ãããéã¯Python OpenID Libraryã«ä»å±ããexamples/server.pyãå©ç¨ããã®ã便å©ã 。dev_appserver.pyãèµ·åãããå¾、以ä¸ã®ããã«OpenIDãµã¼ããèµ·åããã。ããã«ãããã¹ãç¨ã®OpenIDããã¼ã«ã«ã§ä½æã§ãã。
./examples/server.py -s localhost
http://localhost:8000/ ããã©ã¦ã¶ã§éãã¨ãã°ã¤ã³ç»é¢ãåºãã®ã§é©å½ãªååãå ¥ãã(ãã¨ãã°test)。ããã§http://localhost:8000/id/test ãOpenIDã®URLã¨ãªã。ãã®å¾、http://localhost:8080/ ãéã、OpenIDã®å ¥åãã£ã¼ã«ãã§ãã®IDã使ããã¨ãã§ãã。ãã¡ãããã¼ã«ã«ã®OpenIDã§ã¯ãªãmixi OpenIDãä»ã®OpenIDã使ããã¨ãã§ãã。
ããWindowsã使ã£ã¦ãã¦ElementTreeé¢é£ã®ã¨ã©ã¼ãåºãå ´å、æ£ããpyexpatã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ãã¦ããªãå¯è½æ§ããã。ãã®å ´å、Pythonãã£ã¬ã¯ããªã«ããDLLsãã£ã¬ã¯ããªããpyexpat.pydãæã£ã¦ããã¨ç´ããããããªã。
ãã®ä»ã«ã¤ãã¦ã¯ç°¡åãªæ¥æ¬èªè¨³ãmixi OpenIDã®ãã°ã¤ã³ãã¿ã³ã®è¡¨ç¤ºãªã©ã§ããã»ã©é£ããã¯ãªã。ãã¤ãã¯ã·ã£èªè¨¼ãã³ãã¥ããã£èªè¨¼ãClaimed Identifierã夿´ããã ããªã®ã§ãããªã«æéã§ã¯ãªãã¯ã。ãããä»å、Google App Engineã®å¶éãã³ã¼ãã®ãã°ã§æã£ããããæéåã£ã¦ãã¾ã£ã。ããã§ã、ã¡ããã¨åãã¦ãã¾ãããããã°ããããã¨å¿ç¨ã§ãããã 。
追è¨:
ãã°ã¤ã³å±¥æ´ã«ã¤ãã¦ã¯ã»ãã¥ãªãã£ãèæ ®ãã¦æåã®1æå以å¤ã¯ä¼åã¨ã、ãªã³ã¯ããªãããã«å¤æ´ãã。
追è¨2:
ãã°ã¤ã³å¾ã«ã³ã¡ã³ããæ®ããããã«å¤æ´ãã。
ããã、å®éã«ä½¿ã£ã¦ã¿ãã°ãããã®ã ããã®ã³ã¼ãã«ã¯ããã¤ãã®ãã°(ã¨Google App Engineã®å¶é)ããã£ã¦ã¡ããã¨åããªã。ä¸è¨ã®ãªã³ã¯å ã¯æ£å¸¸ã«åãããã«ä¿®æ£ãããã®ã 。
mixi OpenID ãã¹ã
以ä¸ã«ãã°ã®ç®æã¨ãã®ä¿®æ£ã³ã¼ãã示ã。
consumer.py
344-345è¡ç®ã®ä»¥ä¸ã®ã³ã¼ãã
self.response.set_status(302) self.response.headers['Location'] = redirect_url
以ä¸ã®ããã«ä¿®æ£ãã。
self.response.out.write("<html><head><meta http-equiv=\"refresh\" content=\"0;url=%s\"></head><body></body></html>" % (redirect_url,))
ããã¯Google App Engineã®å¶éãåé¿ããããã§、ä¸åº¦HTMLã表示ãåæã«ãªãã¤ã¬ã¯ããè¡ã£ã¦ãã。
fetcher.py
以ä¸ã®57è¡ç®ããã®ã³ã¼ãã§、éã§ç¤ºããã³ã¼ãã®å¾ãã«ãã赤ã§ç¤ºããã³ã¼ããéã®ã³ã¼ãã®åã«ç§»åããã。
if body: method = urlfetch.POST if 'Content-Type' not in headers: headers['Content-Type'] = 'application/x-www-form-urlencoded' else: method = urlfetch.GET if not headers: headers = {}
ã¾ã、å¤é¨ã¢ã¸ã¥ã¼ã«ã®Python OpenID Library (openid)ã¨ElementTree (elementtree)ã¯ææ°ã®ãã®ã«å¤æ´ãã¦ãåé¡ãªãåã。
ãã¼ã«ã«ã§ãã¹ãããéã¯Python OpenID Libraryã«ä»å±ããexamples/server.pyãå©ç¨ããã®ã便å©ã 。dev_appserver.pyãèµ·åãããå¾、以ä¸ã®ããã«OpenIDãµã¼ããèµ·åããã。ããã«ãããã¹ãç¨ã®OpenIDããã¼ã«ã«ã§ä½æã§ãã。
./examples/server.py -s localhost
http://localhost:8000/ ããã©ã¦ã¶ã§éãã¨ãã°ã¤ã³ç»é¢ãåºãã®ã§é©å½ãªååãå ¥ãã(ãã¨ãã°test)。ããã§http://localhost:8000/id/test ãOpenIDã®URLã¨ãªã。ãã®å¾、http://localhost:8080/ ãéã、OpenIDã®å ¥åãã£ã¼ã«ãã§ãã®IDã使ããã¨ãã§ãã。ãã¡ãããã¼ã«ã«ã®OpenIDã§ã¯ãªãmixi OpenIDãä»ã®OpenIDã使ããã¨ãã§ãã。
ããWindowsã使ã£ã¦ãã¦ElementTreeé¢é£ã®ã¨ã©ã¼ãåºãå ´å、æ£ããpyexpatã¢ã¸ã¥ã¼ã«ãèªã¿è¾¼ã¾ãã¦ããªãå¯è½æ§ããã。ãã®å ´å、Pythonãã£ã¬ã¯ããªã«ããDLLsãã£ã¬ã¯ããªããpyexpat.pydãæã£ã¦ããã¨ç´ããããããªã。
ãã®ä»ã«ã¤ãã¦ã¯ç°¡åãªæ¥æ¬èªè¨³ãmixi OpenIDã®ãã°ã¤ã³ãã¿ã³ã®è¡¨ç¤ºãªã©ã§ããã»ã©é£ããã¯ãªã。ãã¤ãã¯ã·ã£èªè¨¼ãã³ãã¥ããã£èªè¨¼ãClaimed Identifierã夿´ããã ããªã®ã§ãããªã«æéã§ã¯ãªãã¯ã。ãããä»å、Google App Engineã®å¶éãã³ã¼ãã®ãã°ã§æã£ããããæéåã£ã¦ãã¾ã£ã。ããã§ã、ã¡ããã¨åãã¦ãã¾ãããããã°ããããã¨å¿ç¨ã§ãããã 。
追è¨:
ãã°ã¤ã³å±¥æ´ã«ã¤ãã¦ã¯ã»ãã¥ãªãã£ãèæ ®ãã¦æåã®1æå以å¤ã¯ä¼åã¨ã、ãªã³ã¯ããªãããã«å¤æ´ãã。
追è¨2:
ãã°ã¤ã³å¾ã«ã³ã¡ã³ããæ®ããããã«å¤æ´ãã。
ã³ã¡ã³ã
ã³ã¼ãã¯ä¿®æ£ç¡ãã§åãã®ã§ãã、index.yamlã®「kind: Login」ã«é¢ããè¡ãã³ã¡ã³ãã¢ã¦ãããå¿ è¦ãããã¾ãã。
ãããããããã°、ã確èªããã ã、ã¨ã³ããªã¼ã«è¿½è¨ãã¦ããã ããã¨å¹¸ãã§ã。
ç¾å¨ã§ã¯GAEå´ã§ãªãã¤ã¬ã¯ãã®å¶éããªã、ã¾ã、ã½ã¼ã¹ã³ã¼ããææ°çãããã®ã§ãã。
index.yamlã®ä»¶ã¯、ãã¼ã¿ã¹ãã¢ã®ã¤ã³ããã¯ã¹è¨å®ããã¦ããã ãã ã¨æãã®ã§ãã、ã³ã¡ã³ãã¢ã¦ãã§ã¯ãªã、index.yamlèªä½ãåé¤ããã®ã§ã¯ãã¡ã§ãããã。ãã®ãã¡ã¤ã«ã¯å®è¡æã«èªåçæãããã¨æãã®ã§。
ããã¨ãçæãããindex.yamlã§åä½ããªãã¨è¨ããã¨ãªã®ã§ãããã。