web-dev-qa-db-ja.com

サブドメイン間でのASP.NET ID Cookie

フォーム認証では、web.configでこれを使用しました(ドメイン属性に注意してください):

<authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
</authentication>

Mvc 5の新しいASP.NET Identity Framework用に、サブドメイン間のシングルサインオンはどのように構成されますか?

より詳しい情報:

マルチテナントアプリケーションを作成しています。各クライアントはサブドメインにあります。

client1.myapp.com

client2.myapp.com

ユーザーがclient1.myapp.comにサインオンしてからclient2.myapp.comに移動し、引き続きサインインできるようにする必要があります。これはフォーム認証で簡単でした。新しいIdentity Frameworkでそれを行う方法を理解しようとしています。

編集

最終的に私のために働いたコードは次のとおりです:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
  AuthenticationType = "Application",
  LoginPath = "/Account/Login",
  CookieDomain = ".myapp.com"
});
40
orourkedd

Startup.Auth.csには、次のようなものが表示されます。

rCの場合:

app.UseSignInCookies();

これはRTMで削除され、cookie authの明示的な構成に置き換えられました。

    app.UseCookieAuthentication(new CookieAuthenticationOptions {
        AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
        LoginPath = new PathString("/Account/Login")
    });

CookieAuthenticationOptionsクラスには、お探しのCookieDomainプロパティがあります。

34
Hao Kung

これは、Identity 2.0がまだ認証Cookieを暗号化するマシンキーに依存していることを知るまで、私を夢中にさせました。したがって、異なるサブドメインにある同じアプリケーションの2つのインスタンスが必要な場合は、各アプリケーションに同じマシンキーを設定する必要があります。

だから要約すると:

  1. CookieDomain = ".myapp.com"
  2. 各アプリケーションのWeb設定で同一のマシンキーを設定する

    <system.web>
      <machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
    </system.web>
    

この答えにより、値を設定することになりました: ASP.NET Identity 2はmachinekeyを使用してパスワードをハッシュしますか?

14
BrandorK

Web.configで、すべてのWebサイト/アプリケーションに対して同じmachineKeyを設定する必要があります。

すべてのWebサイトには、少なくともこの構成が必要です。

http://msdn.Microsoft.com/en-us/library/w8h3skw9(v = vs.85).aspx

<system.web>
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" />
    </authentication>
    <machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" decryption="Auto"/>
  </system.web>

これは一例です

13
christiangobo

Startup.Auth.csファイルで、ドメインにCookieDomainパラメーターを追加します。

var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
    AuthenticationType  = DefaultAuthenticationTypes.ApplicationCookie,
    LoginPath           = new PathString("/Account/Login"),
    CookieDomain        = ".mydomain.com"
};

次に、すべてのWebサイトに対して、一意のマシンキーを設定する必要があります。新しいものを生成する最も簡単な方法は、IISを使用することです。

サイトで「マシンキー」オプションを見つけます。

enter image description here

[キーの生成]ボタンをクリックして、キーを取得します。

enter image description here

最後に、上記のプロセスによりweb.configに以下が追加されます。これを各サイトにコピーする必要があります。

<machineKey
  validationKey="DAD9E2B0F9..."
  decryptionKey="ADD1C39C02..."
  validation="SHA1"
  decryption="AES"
/>
12
JDandChips