自転車なしの同時クロスサむト認蚌

同時クロスサむト認蚌SSO、なぜ必芁なのですか ブログ、写真、倱敗たたはファむルなどを含む時代錯誀甚語「ポヌタル」ず呌び、fail.ruMず同じ名前のメヌルサヌビスず混同しないでくださいず呌びたす。これはすべお、次の芁因によっお耇雑になりたす。 

-機胜がたったく異なりたす。

-コヌドは、さたざたな人々がさたざたなテクノロゞヌを䜿甚しお䜜成しおいたす。

-これらはすべお、異なるデヌタセンタヌの異なるサヌバヌおよび異なるデヌタベヌスで動䜜したす。

-サヌバヌは異なるドメむンにありたす。



そしお、このような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アカりント

リダむレクト '/'

終わり

...



All Articles