在与一个 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.com
和domainB.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的主要内容,如果未能解决你的问题,请参考以下文章