-æ©èœããŸã£ããç°ãªããŸãã
-ã³ãŒãã¯ãããŸããŸãªäººã ãããŸããŸãªãã¯ãããžãŒã䜿çšããŠäœæããŠããŸãã
-ãããã¯ãã¹ãŠãç°ãªãããŒã¿ã»ã³ã¿ãŒã®ç°ãªããµãŒããŒããã³ç°ãªãããŒã¿ããŒã¹ã§åäœããŸãã
-ãµãŒããŒã¯ç°ãªããã¡ã€ã³ã«ãããŸãã
ãããŠããã®ãããªKoshcheiã§ã¯ãåµãå²ã£ãŠãŠãŒã¶ãŒã«1åã ããã°ã€ã³ããæ©äŒãäžãããã®åŸã身å ã確èªããã«ãã¹ãŠã®ãã¬ã³ããªãŒãªãªãœãŒã¹ã«ã¢ã¯ã»ã¹ããå¿ èŠããããŸãã
ããã«ã€ããŠã¯ãã§ã«å€ãã®ããšãæžãããŠãããã³ãŒãã«ã€ããŠãåæ§ã§ãã ããããç§ãã¡ã¯èªè»¢è»ã®å»ºç©ã®èå»ããéãé²ãããšã¯ãããŸããããæ¬ç©ã®ãšã³ãžãã¢ãšããŠæ¢è£œã®éçºãè¡ãããããã䜿çšããŸãã ãã®æ¹æ³ã¯åçŽã§ããã®ãããªå°é£ãªç¶æ³ã«ãé©ããŠããŸãã
次ã«ãèªå·±èšè¿°ã®ä»£æ¿æ¡ãOpenIDãOAuthãSAMLãããã³ããããã¹ãŠãäžè¬çã«è¯ã解決çã§ã¯ãªãçç±ãèªèšŒããŒã¿ã®ä¿åã®åé¡ãããã³é©åãªç¥èãªãã§è¡ã£ãŠã¯ãªããªãã»ãã¥ãªãã£ã®åé¡ãã¯ãã¹ãµã€ãèªèšŒãšã¯äœããããã€ãã®ç¥è©±ãææããŸãã
æ®éçã§ãªãå Žåã®æåãããœãªã¥ãŒã·ã§ã³
å®éã«ã¯ãèããŠããå Žåã»ã©ç©äºã¯éå§ãããŠããããäžè¬çãªCookieãèšå®ããããšã§ãœãªã¥ãŒã·ã§ã³ãåé¿ã§ããå ŽåããããŸãããå€éšãã¡ã€ã³ã衚瀺ãããããã»ãã·ã§ã³ãä¿åããããã®äžè¬çãªããŒã¿ããŒã¹ãæ¶ãããšããã«ããœãªã¥ãŒã·ã§ã³ã¯æ¶ããŸãã
ããã§èª¬æãããŠãããªãã·ã§ã³ã䜿çšã§ããŸãããã³ã¡ã³ãã«ã¯ãiframeãjavascriptããã®ä»ã«ã€ããŠããªãå€ãã®åŠå®æ§ããããŸãã
Openid
ãããã¯ãŒã¯ã«ã¯ãOpenIDèªäœãçºæããåé¡ã解決ãããšããéåžžã«èå³æ·±ãã¡ã¢ããããŸãã OpenIDã¯ãã¡ãŒã«ãšèªèšŒãããµã€ãã®éã®äžèŠãªã¬ã€ã€ãŒã§ãã ããšãã°ãcoolopenid.netã«ã¯ã¡ãŒã«ã«é¢é£ä»ããããŠããã¢ã«ãŠã³ãããããŸãã ã¿ãŒã²ãããµã€ããå ¥åãããšãcoolopenid.netã«éä¿¡ãããããã§æ¢ã«ãã°ã€ã³ããŠããå Žåã¯Cookieã衚瀺ãããããé»åã¡ãŒã«ãšãã¹ã¯ãŒããèŠæ±ããŠIDã確èªããã¿ãŒã²ãããµã€ãïŒfoo1@coolopenid.netãªã©ïŒãå ¥åããŸãã 確ãã«ãã¡ãŒã«ãªã³ã¯ã§ç¢ºèªãããããç°¡åã§ã¯ãããŸãããïŒ
ã¯ãã¹ãµã€ãèªèšŒã®å ŽåããŠãŒã¶ãŒãåãµã€ãã®å ¥ãå£ã§èªåã®èº«å ã確èªããå¿ èŠããããããOpenIDã¯å€ãã®å奜çãªãµã€ãã§ã¯ããŸã䟿å©ã§ã¯ãããŸããã
OAuth
OAuthã¯ããµãŒãããŒãã£ã®ãµã€ãã§ã®èªèšŒãšãããã€ããŒã®Webãµã€ãã§ã®æ¿èªãšããäºéã®ã¿ã¹ã¯ãå®è¡ããŸãããŠãŒã¶ãŒã«ãµãŒãããŒãã£ã®ãªãœãŒã¹ã®æ©èœã䜿çšããŠãããã€ããŒã®Webãµã€ãã®æ©èœãæ¡åŒµããæ©äŒãäžããŸããããšãã°ãTwitterã®åçãžã®ãªã³ã¯ã®ã¢ããããŒããFacebookã®çŸåšã®å Žæã«é¢ããæ å ±ã®è¿œå éãã®è¯ã説æã¯ãã¡ãã§ãã ããã¯ãã°ããã䟿å©ãªãã®ã§ãããç°ãªããµãã©ã€ã€ã®ãµã€ããçµåããããã«èšèšãããŠããŸããããŠãŒã¶ãŒåã®å ±éã®äžå€®ãªããžããªããŸã ãããŸãã
SAML
å°ãã®æ¹å€ã¯å®³ã«ã¯ãªããŸãããã瀟å ããã³ç€Ÿå€ã®ãããžã§ã¯ããå€æ°ãã巚倧äŒæ¥ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ãã®ãœãªã¥ãŒã·ã§ã³ãå®è£ ããååã®çµéšãããŸãæåããŠããªãããšãéæ¥çã«èšŒèšããããšããã§ããŸããã ããã«ãããŸããŸãªããã°ã©ãã³ã°èšèªçšã«ãã®ãããã³ã«ãå®è£ ããã©ã€ãã©ãªã®æ°ã¯ããã»ã©å€ããããŸããã
ãã£ã¹
èªè ã¯ãæ£ããéžæã®ç¬èªæ§ã圌ã«çŽåŸãããããšããããšã§ãç§ãäžã€ã®ããšã«ãªããã¡ã§ããããšããã§ã«èªèããŠããã«éããªãã ã¯ãããããã ç§ã¯èªåã®æããéžæãç·Žç¿ã説æãããã£ãã æ確ãªéžæã¯ãããŸããããCASã¯ç§ã®ããŒãºãšç¥èããŒã¹ã«æãã·ã³ãã«ã§å æ¬çãªãœãªã¥ãŒã·ã§ã³ã§ãã
CASã¯ãåæã¯ãã¹ãµã€ãèªèšŒçšã«ç¹å¥ã«èšèšããããããã³ã«ã§ãã ãã®ãããã³ã«ã«ã¯å°ãªããšã2ã€ã® å®è£ ããã ã ãã®ãã¡ã®å°ãªããšã1ã€ãç©æ¥µçã«éçºãããŠããŸãã 2çªç®ã®æ¹ãæå©ãªéžæã¯ããµãŒããŒãå€ãã®JavaäŸåé¢ä¿ãæãããæ¹åã«ãã©ãã°ããå¿ èŠããªããšããäºå®ã«ãã£ãŠãµããŒãã§ããŸãïŒå€ãã®RubyäŸåé¢ä¿ãæãããæ¹åã«ãã©ãã°ããå¿ èŠæ§ãæãªããŸãïŒã
ãŸããå©ç¹ãšããŠãCASã¯ã·ãã¯ã¯ã©ã€ã¢ã³ãã§ãæ©èœããã¯ã©ã€ã¢ã³ããšãŒãžã§ã³ãããCookieãèšå®ããæ©èœããå¿ èŠãšããªãããšã«ã泚æã§ããŸãã CASãä»ãããŠãŒã¶ãŒèªèšŒã®ç°¡åãªçµ±åã®ããã«ãããŸããŸãªãã©ãããã©ãŒã ã«ååãªã¯ã©ã€ã¢ã³ãããããŸãã
CASã¯ããŸãæ©èœããŸããã ãŠãŒã¶ãŒã«é¢ããããŒã¿ã¯ä¿åããããŠãŒã¶ãŒã®åœ¹å²ãä¿åãããä»ã®ã¡ã³ããŒã«ã€ããŠã¯äœãç¥ããŸããã ãŠãŒã¶ãŒãªããžããªãšããŠã次ã䜿çšã§ããŸãã
-ããŒã¿ããŒã¹
-LDAP / AD
-SPNEGO
-RADIUS
-ãµãŒãããŒãã£ã®ãµãŒãã¹
-...ã¯ããããã¹ããã¡ã€ã«ã§ã
2èŠçŽ èªèšŒãããã³X.509蚌ææžã䜿çšããusbããŒã¯ã³ã§äœ¿çšããããšãå¯èœã§ãã
ã¯ãªãã«ãšç¥è©±
CASã¯éçºãããŠããªãå€ããããžã§ã¯ãã§ãã ãµãŒããŒã®çŸåšã®ããŒãžã§ã³ã¯3.4.8ã§ããããã³ã«ã®ææ°ãªããžã§ã³ã¯2005ã§ãã
ææ°ã®æŽæ°ã¯ä»å¹Ž11æ9æ¥ã§ã ã
ã©ãããããããã³ã«ã¯SSOã®ããŒãºã«å¿ èŠãªæ©èœãå®å šã«å®è£ ããŠãããããšãã°1999幎6æ以éHTTPãããã³ã«ãæŽæ°ãããŠããªãããããããªãéçºã¯å¿ èŠãããŸããã
CASã¯äººæ°ã®ãªããããžã§ã¯ãã§ãã 圌ã¯1æ³ã§ã¯ãªããšããäºå®ã«ããããããã圌ã¯èªããããŸããã§ãã-ã»ãšãã©èª°ãã 120ã®åŠæ ¡ãåç§å€§åŠãç·å倧åŠã1ã€ä»¥äžã䜿çšããŠãããšããäºå®ã¯ãä»ã®èª°ã䜿çšã§ããªãããšã瀺åããŠããŸãã
ãã®å®è£ ã䜿çšãããã¹ãŠã®äººãããã«ç€ºãããŠãããšããäºå®ã§ã¯ãããŸããã
CASã¯ãç¹å®ã®ã¿ã¹ã¯ã®ããã«1ã€ã®äŒç€Ÿã«ãã£ãŠéçºãããŠããŸãã CASãæžããããã°ã©ãã¯ãæè²ããŒã¿ã«ã®äœæã«åãçµãã§ããŸã ã
ç§ã¯ããããã®äººã ã¯èª°ãä»ã®äººã®å ±éã®ä»äºã®ããã®ãœãããŠã§ã¢ãäœããããªåŸæŽè ã§ã¯ãªããšä»®å®ããŸãã ãããŠããããè¡ãããã®ã§ãäžè¬çãªã¢ã¯ã»ã¹ã§äžããããšã¯æ®å¿µã§ã¯ãããŸããã
CASã¯ãéåžžã«çãå¿çšåéïŒå€§åŠãåŠç管çïŒãé€ããä»ã®èª°ãã®ãœãªã¥ãŒã·ã§ã³ïŒuPortalïŒãé€ããŠã©ãã«ãæ¬åœã®æåäºäŸãæããªãæ°ééçºã§ãã
è°è«äžã®ãããã¯ã§èšåãããŠããä»ã®ãœãªã¥ãŒã·ã§ã³ã«ã€ããŠãåãããšãèšããŸãã ãããããç§ã¯äœããç¥ããŸããã
é©ãã»ã©å°ããªã³ãã¥ããã£ã äžè¬çãªããããã£ã®å žåçãªãšã©ãŒããããã§æ€çŽ¢ãããšã100件ã®ã¬ãã¥ãŒããèŠã€ãããŸãã ã
å³èŠãŠã çŽ3,210,000件ã®çµæïŒ0.21ç§ïŒã åŒçšç¬Šã§å²ãå Žåãã€ãŸããå®å šäžèŽã®7.5åãæ¢ããŸãã
é©ãã»ã©å°æ°ã®å®è£ ã å®éã«ã¯ãCASãµãŒããŒã®å®è£ ã¯2ã€ã ãã§ãã ãŸããOpenIDãããã€ããŒã®äœçŸãã®å®è£ ãèšè¿°ãããŠããŸããïŒ
äžèšã®ããã«ãOpenIDã¯ä»£æ¿ã§ã¯ãããŸããã å®è£ ã®æ°ã¯ãçµ±åã®å®¹æããæå³ãããã®ã§ã¯ãããŸããã
åäœåç
æåã®ãšã³ããªã
1.ãŠãŒã¶ãŒããç»é²ãŠãŒã¶ãŒã®ã¿ãã¢ã¯ã»ã¹ã§ããããŒãžã«ã¢ã¯ã»ã¹ããŸãã
2.ãµã€ãã¯CASãµãŒããŒãžã®HTTPãªãã€ã¬ã¯ããè¡ããŸãã
3.ãŠãŒã¶ãŒã¯ãŠãŒã¶ãŒåãšãã¹ã¯ãŒããå ¥åããŸãã
4.å¿ èŠãªã¢ããã¿ãŒãä»ããCASãæ£ãããŠãŒã¶ãŒåãšãã¹ã¯ãŒãã決å®ããŸãã
5.èªèšŒãæåããå ŽåãCASãµãŒããŒã¯ãŠãŒã¶ãŒããµã€ãã«æåãããã°ã€ã³ããŒãžãšããŠç€ºãããããŒãžã«ãªãã€ã¬ã¯ããããªã¯ãšã¹ãã«ãµãŒãã¹æ€èšŒãã±ãããæ·»ä»ããŸãã
6.ãµã€ãã¯ããã±ããã®æ€èšŒã®ããã«CASãµãŒããŒã«å¯ŸããŠå éšã¯ãã¹ãµã€ãHTTPèŠæ±ãäœæããŸãã
7.ãŠãŒã¶ãŒã¯æ¿èªãããŠããŸãããŠãŒã¶ãŒã¯ãã»ãã·ã§ã³CookieãCASãµãŒããŒããåä¿¡ãããã°ã€ã³ã«é¢é£ä»ããããšãã§ããŸãã
åãã°ã€ã³ïŒããšãã°ããµã€ã2ã«ïŒã
1.ãŠãŒã¶ãŒããç»é²ãŠãŒã¶ãŒã®ã¿ãã¢ã¯ã»ã¹ã§ããããŒãžã«ã¢ã¯ã»ã¹ããŸãã
2.ãµã€ãã¯CASãµãŒããŒãžã®HTTPãªãã€ã¬ã¯ããè¡ããŸãã
3. CASãµãŒããŒã¯ãŠãŒã¶ãŒã®Cookieã確èªãããµã€ãã§æåãããã°ã€ã³ããŒãžãšããŠç€ºãããŠããããŒãžã«ãŠãŒã¶ãŒããªãã€ã¬ã¯ããããªã¯ãšã¹ãã«ãµãŒãã¹æ€èšŒãã±ãããæ·»ä»ããŸãã
4.ãµã€ãã¯ããã±ããæ€èšŒã®ããã«CASãµãŒããŒã«å¯ŸããŠå éšã¯ãã¹ãµã€ãHTTPèŠæ±ãäœæããŸãã
5.ãŠãŒã¶ãŒã¯æ¿èªãããŠããŸããã»ãã·ã§ã³CookieãCASãµãŒããŒããåä¿¡ãããã°ã€ã³ã«é¢é£ä»ããããšãã§ããŸãã
ãã®ã¡ãœããã¯ãååãªæ°ã®ã»ãã¥ãªãã£ããŒã«ãéããŸãã
èšçœ®
1. RubyããŒãžã§ã³ãããŒãžã£ãŒ
bash <<ïŒcurl -s raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer ïŒ
echo '[[-s "$ HOME / .rvm / scripts / rvm"]] &&ã "$ HOME / .rvm / scripts / rvm"ïŒRVMé¢æ°ã®ããŒã '>>ã/ .bash_profile
2.ã«ããŒ
rvm install 1.9.2
rvm use --default 1.9.2
gem install bundler
3. rubyââcas-server
git clone git@github.comïŒ rubycas /rubycas-server.git
cd rubyââcas-server
ãã³ãã«ã€ã³ã¹ããŒã«
4. ThinïŒWebãµãŒããŒïŒãã€ã³ã¹ããŒã«ããŠèµ·åããŸã
gem install thin
ã·ã³ã¹ã¿ãŒã
ããã¯æãç°¡åã§ãããæè¯ã®ãªãã·ã§ã³ã§ã¯ãããŸããã ãŠãã³ãŒã³ãšnginxã§å®è¡ããããšãæ€èšãã䟡å€ããããŸãã
ã¯ã©ã€ã¢ã³ã䜿çš
Ruby / Rack / Sinatraã¢ããªã±ãŒã·ã§ã³ã®äŸïŒ
GemfileïŒ
...
gem 'oa-enterprise' ,: require => 'omniauth / enterprise'
...
ã¢ããªã±ãŒã·ã§ã³ïŒ
...
èšå®ïŒlogin_pageã "/ auth / cas"
OmniAuthã䜿çš::æŠç¥:: CAS ã: cas_server => 'https://ruby-cas.mydomain.com'
ã/ auth / cas / callbackããååŸããŸã
auth = request.env ["omniauth.auth"]
account = Account.firstïŒïŒemail => auth ["uid"]ïŒ|| Account.firstïŒïŒé»åã¡ãŒã«=> auth ["uid"] ,:圹å²=>ïŒå€éšïŒ
set_current_accountïŒã¢ã«ãŠã³ãïŒ
ãªãã€ã¬ã¯ã '/'
çµãã
...