-1

3つのASP.NET MVC 5プロジェクトが並行して機能しています。認証のために、我々はシングルサインオンを使用して来た、非常に簡単なチュートリアル、以下:シングルサインオンプロジェクトでのIDクレームの取得

Implementation of Single Sign On (SSO) in ASP.NET MVC

主なアイデアは、3間で共有MachineKeyを作成し、3つのweb.configファイルで同じ認証設定を追加することです。

  • SSO
  • にWebApp1
  • webapp2を私たちのプロジェクトの

ワン(SSO)仕事をしていませんし、他の2つはそれに依存する:

は、だから今、私たちは3と呼ばれるサイトを持っています。それはうまくいきました...

SSOプロジェクトでは、ID 2クレームベースの認証を使用しています。ユーザーがログインすると、「ID」にカスタムクレームが追加されます。このようにして、私たちは2つの別々のクッキーを持っています:一つはシングルサインオンプロセス用、もう一つはクレームを保存するためです。ここで

は、C#のコードです:

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Login(LoginViewModel model, string fromSite, string returnUrl) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(model); 
     } 

     var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false); 
     switch (result) 
     { 
      case SignInStatus.Success: 
       // here the cookie which contains claims *is created* by Identity 2 

       // here we create the cookie used for Single Sing On 
       FormsAuthentication.SetAuthCookie(username, false); 

       // redirecting 
       if (string.IsNullOrWhiteSpace(fromSite)) 
       { 
        if (string.IsNullOrWhiteSpace(returnUrl)) return RedirectToAction("Index", "Home"); 
        return RedirectToLocal(returnUrl); 
       } 

       return Redirect(string.Format("{0}{1}", fromSite, returnUrl)); 

       // other cases inside switch 
       . 
       . 
       . 
     } 
    } 

ユーザーが別のSSOのサイトから行く、WebApp1を言って、彼がログインしたままになりますが、私たちは主張を失いました。

これらの2つのCookieをマージし、別のサイトのクレームを取得する方法はありますか?

答えて

2

私はついにこれを管理しました!

個別認証で3つの新しいMVC 5プロジェクトを作成します。同じMachineKeyweb.configのファイルにsystem.webタグ内に追加します。今あなたは終わり、すべてのものが魅力のように機能します!簡単なピース:) OWINはすべてのことを世話します。

3つのプロジェクトのうち2つから認証と承認に関連するものを削除してください。このようにして、そのうちの1つがコアになり、2つのコアがそれに依存します。私のプロジェクトは以下のとおりです。

  • SSO
  • にWebApp1
  • webapp2を

例えばControllersフォルダからAccountController.csManageController.csを削除し、その関連のviewmodelsでViewsAccountManageフォルダを削除します。両方のプロジェクトのApp_StartフォルダにあるStartup.Auth.csファイル(例:WebApp1WebApp2)を削除することもできます。削除のすべての後

、これでその2つのプロジェクトのルートディレクトリにStartup.csの内容を置き換えます

using Microsoft.AspNet.Identity; 
using Microsoft.Owin; 
using Microsoft.Owin.Security.Cookies; 
using Owin; 

[assembly: OwinStartupAttribute(typeof(WebApp1.Startup))] 
// for the other one, rename the WebApp1 to WebApp2 
namespace WebApp1 
{ 
    public class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.UseCookieAuthentication(new CookieAuthenticationOptions 
      { 
       AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, 
      }); 
     } 
    } 
} 

上記のコードはもともとあなたが削除したStartup.Auth.csファイルの一部でした!今、OWINはクッキーの種類を知っており、それを読むことができます。まだログインしていない不正なユーザは、WebApp1に行くとき、彼はHTTP 401エラーページが表示され、SSOのログインページにリダイレクトされません。

左一つのことがあります。あなたはあなたが望む方法でこの事件を処理する必要があります。私はFilterが仕事をすると思います。

私は助けてくれました:)

関連する問題