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 .
The big question is: How can I validate those cookie and get known to which user it belongs?
从我知道的vBulletin等其他应用程序中,会话cookie的值存储在具有相应UserId的某个数据库表中 . 因此很容易验证这些信息 . 在ASP.NET核心标识中,我找不到任何具有my SessionAuth
cookie值的表 .
所以我认为它是某种calulcated或加密字符串,可能类似于JWT . 由于我的ASP.NET Core应用程序使用我的UserId对 AspNetUsers
表进行了目标查询,因此必须能够解密这些字符串,这至少会导致登录用户的Id .
我也开始关注.NET基金提供的source code,这似乎证实了我的理论 . 但我'm not really aware of yet how ASP.NET Core Identity authentication cookies works in detail, so that I'能够解密cookie . 似乎Identity使用machine keys来解密那些存储在服务器文件系统中的cookie .
1 回答
我在这里回答了类似的问题How to manually decrypt an ASP.NET Core Authentication cookie?,它应该为您提供很多有用的信息 .
此外,存储在asp.net身份验证cookie中的是身份验证声明 . 在链接中,我将展示如何将cookie解密为原始字符串以及如何将cookie解密为AuthenticationTicket .
你也可以找到这个堆栈溢出q&a有用:How to gain access to Asp.Net Core encryption keys?