在与一个 IIS 应用程序连接的两个域之间共享 OWIN 身份验证 Cookie

Posted

技术标签:

【中文标题】在与一个 IIS 应用程序连接的两个域之间共享 OWIN 身份验证 Cookie【英文标题】:Share OWIN Authentication Cookie across two domains connected with one IIS application 【发布时间】:2020-12-29 23:33:21 【问题描述】:

我想知道,是否有可能在domainA.comdomainB.com 之间共享 OWIN 身份验证 Cookie,它们都连接到同一个 IIS 应用程序。我想要实现的是,当用户登录domainA.com 并转到domainB.com 时,他也将在那里登录。我可以在没有 SSO 逻辑的情况下做到这一点吗? 现在我已经配置了 OWIN cookie 身份验证:

public class Startup

    public void Configuration(IAppBuilder app)
    
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        
            AuthenticationType = "AppCookieName",
            AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
            LoginPath = new PathString("/PathToLogIn")
        );
 
        AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
    

【问题讨论】:

【参考方案1】:

我们熟悉的登录逻辑是用户向domainA发送登录请求,domianA从请求中获取信息并确认,并在响应中包含验证过的cookie。

所以如果要共享owin认证cookie,最基本的就是要保证domainA和domainB中的机器密钥相同。

    在 statup 中配置 OWIN cookie 身份验证。

    重定向到适当的登录页面。 domainA 和 domainB 是不同的两个应用程序,您需要确保当用户浏览其中任何一个时,它会重定向到适当的登录页面。并在一个应用程序中添加应用程序设置键。

      <appSettings>
          <add key="LoginUrl" value="your login url">
          <add key="LogoutUrl" value="your logout url">
      </appsettings>
    

    设置机器密钥。确保 domainA 和 domainB 具有相同的机器密钥。您可以在 iis 中从一个站点生成密钥并将其复制到应用程序配置中。

     <system.web>
       <machineKey decryptionKey="B6047E4219F0EF483DCBBAC097AF677E8D199DC1909596DB" validationKey="9E525E30F6D68862E6157607F9E3EB9E17FFCF366B7D6C080622097D5BFCA1E83B993A8B8DB5FAFFB6B0F7BA092BD8948DC0A1F5DF119B606F1965F4DDFF4D5A" />
     </system.web>
    

如果你不使用单点登录逻辑,可能很难实现,单点登录是目前最合适有效的方法。所以我建议你使用单点登录。您可以参考document分享cookie。

【讨论】:

感谢您的回复。我想你误解了我一点。我有两个域绑定到同一个 IIS 应用程序(一台服务器)。如果您对此特定情况有解决方案,请告诉我。 同一个站点绑定不同的域,不太可能共享cookies。因为cookie是通过域存储来区分的。根据cookie规范,浏览器根据域名判断一个网站是否可以操作另一个网站cookie。

以上是关于在与一个 IIS 应用程序连接的两个域之间共享 OWIN 身份验证 Cookie的主要内容,如果未能解决你的问题,请参考以下文章

在两个域之间共享共享 html 内容时出错

使用 IIS express 在域和子域之间共享 cookie

在同一域的两个网站之间共享 cookie

IIS 7.5 - 为另一个域上的文件共享设置虚拟目录

在 IIS7 上启用跨域资源共享

在Web和控制台应用之间共享配置文件