【发布时间】:2017-09-03 17:45:38
【问题描述】:
ASP.NET Core 标识用作 ASP.NET Core 应用程序的身份验证和自动化提供程序。此外,我想为第三方 php 应用程序提供 SSO。 ASP.NET Core 应用程序使用 Cookie 身份验证。两个应用程序都在同一个域上,所以我的想法是使用 PHP 验证来自 ASP.NET 的会话 cookie,当用户登录 NET Core 应用程序时,这将在 PHP 应用程序中自动登录用户。
更清楚地说,这是配置 cookie 身份验证的方式:
services.Configure<IdentityOptions>(options => {
options.Cookies.ApplicationCookie.CookieName = "SessionAuth";
options.Cookies.ApplicationCookie.LoginPath = new PathString("/Account/Login");
});
因此,在使用 ASP.NET Core 应用程序登录后,我只需在 PHP 中使用 $_COOKIES['SessionAuth'] 即可获取 cookie。
最大的问题是:如何验证这些 cookie 并知道它属于哪个用户?
从 vBulletin 等其他应用程序我知道,会话 cookie 的值存储在具有相应 UserId 的某个数据库表中。所以很容易验证这些信息。在 ASP.NET Core Identity 中,我找不到任何具有我的 SessionAuth cookie 值的表。
所以我认为它是某种计算或加密的字符串,可能类似于 JWT。由于我的 ASP.NET Core 应用程序使用我的 UserId 对 AspNetUsers 表进行有针对性的查询,因此必须可以解密这些字符串,这至少会导致登录用户的 Id。
我也开始查看 .NET 基金会提供的source code,这似乎证实了我的理论。但我还没有真正了解 ASP.NET Core Identity 身份验证 cookie 的详细工作原理,因此我能够解密 cookie。似乎 Identity 使用 machine keys 来解密存储在服务器文件系统中的那些 cookie。
【问题讨论】:
-
嗨@lion,你找到解决这个问题的方法了吗?我有一个类似的问题:stackoverflow.com/questions/50001450/…
标签: c# cookies asp.net-core asp.net-core-1.1