【问题标题】:Validate ASP.NET Core Identity session cookie from external application从外部应用程序验证 ASP.NET Core Identity 会话 cookie
【发布时间】: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。

【问题讨论】:

标签: c# cookies asp.net-core asp.net-core-1.1


【解决方案1】:

我在这里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?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-30
    • 2019-11-09
    • 2021-03-28
    • 2020-03-31
    • 2017-10-29
    • 2015-08-16
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多