2016-07-12 8 views
0

私はMVCアプリケーションの認証にSystem.IdentityModelとクレームベースの認証を使用しています。私はFedAuthクッキー(複数可)を作成するには、このアプローチを使用して、ユーザー名とパスワードを確認した後、ログインページで :ソリューション上の各アプリケーションでFedAuthクッキーを一意にするにはどうすればいいですか?

var token = new SessionSecurityToken(MyCustomClaimsPrincipal.GetInstance(username, roles,claims)   );  
    token.IsPersistent=rememberMe; 

    var sam = FederatedAuthentication.SessionAuthenticationModule; 
    sam.IsReferenceMode = true; 
    sam.WriteSessionTokenToCookie(token); 

すべてが正常に動作しますが、私は同じ溶液中で2つの他のアプリケーションで正確に同じアプローチを使用するときに問題がありますそれは異なるドメインに公開される予定です。しかし、ローカルホストのFedAuth Cookieはお互いに矛盾しています。あるアプリにログインすると、他のアプリでCookieが有効でないため、もう一度ログインする必要があります。

実際、私は同時に1つのアプリでしか動作できません。 私はそれがローカルホスト上にあると思うし、公開後に別のドメインに問題はありません。しかし、私はFedAuth Cookieを1つのソリューションで各アプリケーション固有のものにすることを推奨します。出来ますか?そしてどうやって? おそらく、ContextまたはContextIdをSessionSequrityTokenのコンストラクタで使用することは可能です。しかし、私はそれについての例を見いださなかった。コンテキストとcontextIdパラメータとして送信するものを私は知らないのですか?

答えて

1

sessionAuthenticationModuleには、cookiehandler(https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.web.sessionauthenticationmodule_members.aspx)というメンバーがあります。このcookiehandlerには、Cookieの名前である名前が付いています。 https://msdn.microsoft.com/en-us/library/microsoft.identitymodel.web.cookiehandler_members.aspx

はまた、あなたが設定で、これは

+0

はどうもありがとうございまし役立ちます <system.identityModel.services> <federationConfiguration> <cookieHandler requireSsl="false" name="yourcookienamehere"/> ...

</system.identityModel.services>

希望をやっていることを行うことができます。それは動作しますが、私も別の問題があります。私がログインしている間(ローカル)、ソリューションをビルドするたびにクッキーはもう有効ではなく、もう一度ログインする必要があります。なぜなのかご存知ですか?たぶんセッションのクッキーの有効期限を設定する必要がありますが、それは不可能です。私が設定しなければ、デフォルトの有効期限は常に12時間です! – user3569123

+1

これは、セッションが「サーバー」で期限切れになったことと関係していると思います。以前のセッションはWebサーバーに存在しなくなり、セッションセキュリティトークンはもはや有効ではなくなりました。私はこれが正常な動作だと思う。 STSはサインインしたままにしておくことがあります。その場合、STSのサインインページへの小さなリダイレクト後にローカルホストアプリケーションが自動的に新しいセキュリティトークンを取得します。どのSTSを使用しますか? –

関連する問題