2016-05-20 3 views
0

私はASP.NET MVCで動作する数多くの異なるWebアプリケーションを用意しています。これらのASP.NET MVCアプリケーションは.NET/Angularハイブリッドであり、一般にWebAPI APIを呼び出し、IIS上で独自のアプリケーションで実行されます。OAuthトークンを使用してシングルサインオンソースから異なるASP.NET MVCアプリケーションを認証する

すべてのアプリケーションは同じドメインにありますが、別々のサブドメインにあります。それらはすべてIISの同じインスタンス上で実行されます。

  • 支払いアプリケーション(MVC、payments.myapp.com
  • ニュースアプリケーション(MVC、news.myapp.com
  • 支払い:

    構造は次のようになりますAPI(WebAPI、paymentsapi.myapp.com

  • ニュースAPI(WebAPI、newsapi.myapp.com
  • ログインアプリケーション(MVC、login.myapp.com
  • ログインAPI(WebAPIの、loginapi.myapp.com)私が行うことができるように必要なもの

はログです1つのソース、すなわちログインアプリケーションから支払いおよびニュースアプリケーションにアクセスすることができます。次に、ログインアプリケーションはログインAPI(これは明らかに制限されていない)を呼び出してトークンを発行します。

ユーザーがトークンなしでPaymentsまたはNews Applicationsにアクセスしようとすると、ログインアプリケーションにリダイレクトする必要があります。 Payments APIとNewsAPIも有効なトークンなしではアクセスできないようにする必要があります。これはログインと同時に設定する必要があります。

現在、ログインAPIは、OWIN/OAuthを使用してベアラトークンを正常に発行します。私が確信しているのは、サブドメイン間でこれを使用している部分です。

どうすればいいですか?

答えて

0

この機能を実現するには、Owin認証ミドルウェアで構築されたAsp.Netを使用できます。この偉大なarticleを参照してくださいと私はあなたのニーズに合ったソリューションを考え出すことを確信しています。

IAppBuilderの拡張メソッドを別のクラスライブラリに作成し、すべてのアプリケーションで共有してトークン検証を行います。一例として、以下の(記事からコピーしたコード)を参照してください:

public static void ConfigureOAuth(this IAppBuilder app)   
{ 
      var issuer = "http://jwtauthzsrv.azurewebsites.net"; 
      var audience = "099153c2625149bc8ecb3e85e03f0022"; 
      var secret = TextEncodings.Base64Url.Decode("IxrAjDoa2FqElO7IhrSrUJELhUckePEPVpaePlS_Xaw"); 

      // Api controllers with an [Authorize] attribute will be validated with JWT 
      app.UseJwtBearerAuthentication(
       new JwtBearerAuthenticationOptions 
       { 
        AuthenticationMode = AuthenticationMode.Active, 
        AllowedAudiences = new[] { audience }, 
        IssuerSecurityTokenProviders = new IIssuerSecurityTokenProvider[] 
        { 
         new SymmetricKeyIssuerSecurityTokenProvider(issuer, secret) 
        } 
       }); 

     } 

発行者は同じ情報(秘密と観客)を使用して、トークンを発行します。検証ロジックはサブドメイン全体で同じなので、トークンはすべてのサブドメインで有効です。

質問がある場合はお知らせください。

ありがとう、 Soma。

+0

リンクをありがとうございました。この記事では機能を実装しましたが、ドメイン間でトークンを使用する問題は解決していません。 – Graham

+0

私の答えの更新をご覧ください。 –

+0

Loginアプリケーションは別になっているので、それをAuthorization Serverとして使用できます。これはさらに良い選択肢になります。同じブログの[link](http://bitoftech.net/2014/09/24/decouple-owin-authorization-server-resource-server-oauth-2-0-web-api/)には、それは動作します。特に懸念がある場合は教えてください。できる限り私はそれを明確にしようとします。ありがとうございました。 –

関連する問題