ASP.NET Core Identity用作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中,我找不到任何具有my SessionAuth
cookie值的表。
所以我认为它是某种calulcated或加密的字符串,可能类似于JWT。由于我的ASP.NET Core应用程序使用我的UserId对AspNetUsers
表进行了目标查询,因此必须能够解密这些字符串,这至少会导致登录用户的Id。
我也开始关注.NET基金提供的source code,这似乎证实了我的理论。但我还没有真正意识到ASP.NET核心身份认证cookie如何工作,所以我能够解密cookie。似乎Identity使用machine keys来解密那些存储在服务器文件系统中的cookie。
答案 0 :(得分:0)
我在这里回答了一个类似的问题How to manually decrypt an ASP.NET Core Authentication cookie?,它应该为您提供很多有用的信息。
此外,asp.net身份验证cookie中存储的内容是身份验证声明。在链接中,我将展示如何将cookie解密为原始字符串以及如何将cookie解密为AuthenticationTicket。
您可能还会发现此堆栈溢出问题并且有用:How to gain access to Asp.Net Core encryption keys?