ASPベースを実現する.NET Forms認証のサブドメイン間単一ログイン

3258 ワード

アプリケーションにまたがるASPについて.NET Forms認証は、皆さんもよく知られていると思います.数年前、MSDNのアプリケーション間でForms認証を行い、唐のプログラマーのASP.NETサイトはサブドメイン名の単点登録(SSO)の実現にまたがって、duduの2級ドメイン名Cookieに関する問題と解決方法.このスキームは実際にはcookieを用いてサブドメイン間で共有することができ,現在ほとんどの主流器がIE 6+/F 3/Opera 9/Chromeを含むこの特性をサポートしている.しかし、これらの記事では、「共有ログインセンター」ではなく、「共有アイデンティティチケットクッキー」について説明しています.つまり、アプリケーション(サイト)ごとに独自のlogin実装がありますが、実装プロセスはアイデンティティチケットクッキーが同じdomainなどの属性を持っていることを保証します.このように完全な意味でのSSOは実現されていないようで、各サイトは自分のログイン検証コードを維持する必要があります.もちろん、アプリケーション間でForms認証を行う「ネットワークフィールド」という問題は大きくありません.これらのサイトは実際にはプログラムのコピーであるからです.では、Windows Liveのように統合されたログイン検証センターが1つしかないことを実現したいとしたら?たとえば、次の4つのサイトを計画しました.
http://www.ssolab01.leoworks.net
マスタサイト
http://news.ssolab01.leoworks.net
ニュースチャンネル
http://forum.ssolab01.leoworks.net
フォーラム
http://passport.ssolab01.leoworks.net
パスポートセンター
内http://passport.ssolab01.leoworks.netパスポートセンターとしては、その駅の中のhttp://passport.ssolab01.leoworks.net/login.aspxログイン検証ロジックを実装します.認証が必要な場合、他のサイトはこのサイトにジャンプして検証し、検証が通過した後、元のリクエスト接続にジャンプします.
サブサイトのwebであれば簡単だと思います.config forms要素のloginをhttp://passport.ssolab01.leoworks.net/login.aspxまあまあですが、実はそうではありません.そう、デフォルトのASPを内蔵しない場合はNET Forms検証(FormsAuthenticationModuleによる)は、ASP/JSP/PHPで完全に手動で実現されているように、論理的にはコード量の問題だけがはっきりしています.しかし、FormsAuthenticationModuleと実用的なFormsAuthenticationの包装と濾過を経て、2つの大きな問題が発生しました.
1.リダイレクトをサポートするreturnUrlパラメータには、サイトホストの完全なパスではなく、元のリクエストの相対パスが含まれます.これは同じサイト内で大丈夫ですが、サイトをまたぐとログインに成功して帰れません.
2.手動でreturnUrlを完全なホストパスに追加すると、ログインは成功したが、直接リダイレクトしたhttp://passport.ssolab01.leoworks.net .
長い間検索してやっと解決策を発見しました.
問題2については、比較的容易である、ASP.NET 2.0は、forms要素内でenableCrossAppRedirects="true"を設定する限りサポートされています.これは、passportが元のリクエストに戻る責任を負うため、passportサイト内で設定すればよいことに注意してください.
passportのweb.config
        
  
            
   
        
  
        
  
            
   
            
   
        
  
        
  

 
wwwまたはforumのweb.config
        
  
            
   
        
  
        
  
            
   
            
   
        
  
        
  

問題1では、ユーザーがターゲットリソースにアクセスできるかどうかを手動で確認する必要があります.http://passport.ssolab01.leoworks.net/login.aspxページには、returnUrlパラメータとして元の要求アドレスが完全に表示されます.チェックのタイミングはPostAuthenticateRequestイベント内で選択します.チェックロジックはUrlAuthorizationModuleを使用します.CheckUrlAccessForPrincipalメソッド(ASP.NET 2.0+サポートに注意).HttpModuleを単独で書くか、Globalに直接入れることができる.asaxで.これは、サブサイトで実現される限り、passportサイトは必要ありません.passportはサイト内ジャンプであるためです.
<%@ Application Language="C#" %>

添付ファイルは完全なテスト例であり、使用説明に注意してください.
1.IISサイトの構築
IISには3つのサイトがあり、ホストヘッダはそれぞれ以下のように設定されています.
http://www.ssolab01.leoworks.net http://forum.ssolab01.leoworks.net http://passport.ssolab01.leoworks.net
ディレクトリは次のようになります.
Central Forum Passport
2.DNS解析用メモ帳C:WindowsSystem 32driversetchostsファイルを開く
3つのレコードを追加
127.0.0.1    passport.ssolab01.leoworks.net 127.0.0.1    www.ssolab01.leoworks.net 127.0.0.1    forum.ssolab01.leoworks.net
本機は127.0.0.1を使用すればよく、ローカルエリアネットワークの他のクライアントのhostsなら以上の3つのウェブサイトをインストールするホストIPアドレスを使用する
ダウンロード
LeoLab.SSO.FormsAuthCrossSubdomain.zip (15.46 kb)
原文ミラー:ASPベースを実現する.NET Forms認証のサブドメイン間単一ログイン