2017-04-08 88 views
0

ASP.NET Core Identity用作ASP.NET Core应用程序的身份验证和自动化提供程序。此外,我想为第三方php应用程序提供SSO。 ASP.NET Core应用程序使用Cookie身份验证。这两个应用程序都位于同一个域中,所以我的想法是使用PHP验证ASP.NET中的会话cookie,当他在NET Core应用程序中登录时,PHP将自动在PHP应用程序中登录用户。从外部应用程序验证ASP.NET Core Identity会话cookie

更清楚,这是cookie认证的配置:

services.Configure<IdentityOptions>(options => { 
       options.Cookies.ApplicationCookie.CookieName = "SessionAuth"; 
       options.Cookies.ApplicationCookie.LoginPath = new PathString("/Account/Login"); 
      }); 

因此,使用ASP.NET应用程序的核心在登录后,我简直可以用$_COOKIES['SessionAuth']在PHP中得到的cookie。

最大的问题是:如何验证这些cookie并获知它属于哪个用户?

从其他应用程序,如vBulletin,我知道,会话cookie的值存储在一些数据库表中与相应的UserId。所以很容易验证这些信息。在ASP.NET Core Identity中,我找不到任何含有我的SessionAuth cookie的表。

所以我认为它的某种坩埚或加密字符串,可能类似于智威汤逊。由于我的ASP.NET Core应用程序使用我的UserId对AspNetUsers表执行有针对性的查询,因此必须能够解密这些字符串,这至少会导致登录用户的Id。

我也开始研究.NET基金提供的source code,这似乎证实了我的理论。但是我并没有真正意识到ASP.NET Core Identity身份验证Cookie是如何工作的,因此我可以解密cookie。似乎Identity使用machine keys来解密存储在服务器文件系统中的cookie。

回答

相关问题