【问题标题】:Sharing cookie between two asp.net mvc applications在两个 asp.net mvc 应用程序之间共享 cookie
【发布时间】:2015-02-13 00:21:56
【问题描述】:

我有以下问题:我曾研究过在同一个域上的两个应用程序之间共享 cookie,但我很确定我遗漏了一些东西并且还没有找到我的答案。

我在这样的网站上有两个应用程序:app.domain.com 和 portal.app.domain.com 第一个应用程序是 Orchard cms,我创建了自己的自定义会员提供程序,因此 orchard 中的身份验证如下所示:

 if (ModelState.IsValid && CustomMembershipProvider.ValidateUser(userNameOrEmail, password))
 {
    FormsAuthentication.SetAuthCookie(userNameOrEmail, true);
 }

和 web.config 在两个应用程序中。

<authentication mode="Forms">
      <forms name="loginCookie" path="/" loginUrl="~/Users/Account/AccessDenied" timeout="2880" cookieless="UseCookies"
         enableCrossAppRedirects ="true" domain=".domain.com"
         requireSSL="false"/>
    </authentication>

<machineKey validationKey="CB6DEDC99140ABCEA1CFE08BEF8407BE2AE60DDB905264F6F7FAA9650B5AB4F1986F84878B4842FB9B51EDD477FFC518C6B6F1687FF25D5BAE883C313F05A6A4" decryptionKey="B0F735974F5261E63D07F4571FB11B392477173098F71E7CA76C1DD9A459C638" validation="SHA1" decryption="AES" />

第二个应用是 asp.net mvc 4 应用。

Cookie 每次都会创建,因此它可以工作,但 portal.app.domain.com 不会“看到”loginCookie。 Request.IsAuthenticated 返回 false 并且 Request.Count 不包含我想要的有效 cookie 数量。更重要的是,当我登录 portal.app.domain.com loginCookie 的创建方式完全相同,但具有新值。奇怪的是我可以 fiddler 看到域的所有 cookie。我发现了一些关于重定向的东西,但有人可以向我解释更多关于它的信息(我应该添加什么?),此外,是否可以在不重定向的情况下共享 cookie,我的意思是当登录 app.domain.com 时,用户可以编写地址门户。 app.domain.com 在浏览器中,他仍然可以登录吗?

提前感谢您的所有回复。

【问题讨论】:

  • 你解决了吗?我有同样的问题

标签: c# asp.net cookies single-sign-on orchardcms


【解决方案1】:

如果我没记错的话,默认情况下,您的每个项目中都会有一个默认连接字符串 它将是connectionStringName="DefaultConnection"

你会在 web.config 中找到它,因为我的项目中有代码

<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
  </providers>
</membership>

设置两个项目中通用的 DefaultConnection 连接字符串,以便您可以为两个项目设置相同的设置

【讨论】:

    猜你喜欢
    • 2018-08-25
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 2011-02-26
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    相关资源
    最近更新 更多