2011-09-05 12 views
5

私は正常に私の2つのWebドメインでWIFとSSOを統合しました。今私はいくつかのユーザーがSSOを使用してサインオンし、他のユーザーがSSOを使用しないという要件があります。どのように私はこのことを達成することができますか?シングルサインオンWIFで

私はあなたの質問は少しあいまいですので、多分これが正しい答えではない、

おかげ

Shahram Javed

+0

具体的にお答えください。このレベルの詳細で答えを提供することは困難です。 –

+0

詳しくはこちらをご覧ください。ユーザーは現在どのようにログオンしていますか?どのようにログオンを分割したいですか?これはアクティブかパッシブですか? – nzpcmad

答えて

12

をあなたの助けをいただければ幸いです。 OPや他の誰かに役立つことを期待して私たちの話(エウジェニオが助けた)を関連させてください。私は、SSOを使用しないユーザーもいるため、「他のユーザーではない」と解釈しています。フォーム認証や別のものを使用しているようです。

フォーム認証のwif実装バージョンもサポートするWebアプリケーションでは、SSO用にWIFを使用します。

誰かがサインインページにアクセスしてユーザー名とパスワードを入力した場合、WIFを使用して自己発行のClaimsPrincipalを設定します。本質的に、ウェブサイトはそれ自体にクレームを提供している。 FederatedAuthenticationは、FormsAuthenticationが通常と同じ方法で使用されます.FederatedAuthenticationで静的メソッドを使用してCookieを設定します。ビットは異なりますが、基本的に同じプリンシパルです。

var token = FederatedAuthentication.SessionAuthenticationModule 
    .CreateSessionSecurityToken(claimsPrincipal, "MyApp.Token", 
    DateTime.UtcNow, DateTime.UtcNow.AddDays(7), false); 
FederatedAuthentication.SessionAuthenticationModule 
    .AuthenticateSessionSecurityToken(token, true); 

私たちのWebアプリケーションは、単一の信頼できるプロバイダ(Nのフェデレーションパートナーと交渉するADFSサーバー)を使用します。認証されていないユーザーをサインインページまたはSSOユーザーのADFSにリダイレクトするかどうかを決定するカスタム方法が必要です。パッシブリダイレクトを無効にするため、WIFは自動的に人をADFSに送信しません。

<wsFederation passiveRedirectEnabled="false" 
    issuer="https://adfs.ourplace.com/adfs/ls/" 
    realm="http://www.ourplace.com" .../> 

ここから、認証属性(私たちはASP.NET MVCを使用しますが、それはあなたに適しています)を使用します。

public class MyAuthorizeAttribute : FilterAttribute, IAuthorizationFilter 
{ 
    public void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.User.Identity.IsAuthenticated) 
      return; // all good 

     RedirectTo(IsSSO() ? GetADFSUrl() : GetSignInUrl(); 
    } 
} 

認証されていないユーザがSSOユーザであるかどうかを判断するには、ホームレルムディスカバリの問題があります。異なる人々がそれを別々に解決します。 SSOユーザーが最初にSSOを使用してシステムに接続すると、ホームレルム(ADFSのクレームプロバイダID)で永続的なCookieが作成されます。クッキーがない場合、サインインに行きます。クッキーが存在する場合、それらはADFSにリダイレクトされます。 URLは次のとおりです。

var adfsEntryPoint = FederatedAuthentication.WSFederationAuthenticationModule.Issuer; 
var wtRealm = FederatedAuthentication.WSFederationAuthenticationModule.Realm; 
var whr = <from home realm cookie> 
var redirectUrl = string.Format("{0}?wa=wsignin1.0&wtrealm={1}&whr={2}", 
    adfsEntryPoint, 
HttpContext.Server.UrlEncode(wtRealm), 
HttpContext.Server.UrlEncode(whr)); 

Nフェデレーションパートナーに直接リダイレクトする場合は、トークン更新URLをCookieに保存してください。

関連する問題