フォーム認証では、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"
});
Startup.Auth.csには、次のようなものが表示されます。
rCの場合:
app.UseSignInCookies();
これはRTMで削除され、cookie authの明示的な構成に置き換えられました。
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
CookieAuthenticationOptionsクラスには、お探しのCookieDomainプロパティがあります。
これは、Identity 2.0がまだ認証Cookieを暗号化するマシンキーに依存していることを知るまで、私を夢中にさせました。したがって、異なるサブドメインにある同じアプリケーションの2つのインスタンスが必要な場合は、各アプリケーションに同じマシンキーを設定する必要があります。
だから要約すると:
各アプリケーションのWeb設定で同一のマシンキーを設定する
<system.web>
<machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
</system.web>
この答えにより、値を設定することになりました: ASP.NET Identity 2はmachinekeyを使用してパスワードをハッシュしますか?
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>
これは一例です
Startup.Auth.csファイルで、ドメインにCookieDomain
パラメーターを追加します。
var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieDomain = ".mydomain.com"
};
次に、すべてのWebサイトに対して、一意のマシンキーを設定する必要があります。新しいものを生成する最も簡単な方法は、IISを使用することです。
サイトで「マシンキー」オプションを見つけます。
[キーの生成]ボタンをクリックして、キーを取得します。
最後に、上記のプロセスによりweb.config
に以下が追加されます。これを各サイトにコピーする必要があります。
<machineKey
validationKey="DAD9E2B0F9..."
decryptionKey="ADD1C39C02..."
validation="SHA1"
decryption="AES"
/>