0

我有带有 .NET Core Identity 的 .NET Core 应用程序。我已将共享 cookie 设置为Startup.cs

services.AddIdentity<User, Role>()
    .AddEntityFrameworkStores<DataContext>()
    .AddDefaultTokenProviders();

services.ConfigureApplicationCookie(options =>
{
    options.Cookie.Name = ".AspNet.SharedCookie";
});

services.AddAuthentication()

...

app.UseAuthentication();
app.UseAuthorization();

此外,我还有第二个 .NET Core 应用程序,我根本没有身份验证,但只想使用该 SharedCookie,我在以下内容中执行了以下操作Startup.cs

services.AddAuthentication("Identity.Application")
    .AddCookie("Identity.Application", options =>
    {
        options.Cookie.Name = ".AspNet.SharedCookie";
    });

...

app.UseAuthentication();
app.UseAuthorization();

并在控制器操作上设置属性[Authorize]

我登录到第一个应用程序并转到第二个应用程序并看到错误/Account/Login...页面不存在。

是的,我没有那个页面,但为什么我会看到这个问题?我是否忘记在代码中添加任何内容?还有一个问题:什么是 SharedCookie 字符串?它是随机字符串还是编码了一些用户数据?我可以从 SharedCookie 中提取任何信息,例如用户 ID 吗?

4

1 回答 1

0

所以我的解决方案是向两个应用程序添加 DataProtection 步骤:

if (!Env.IsDevelopment())
{
    services.AddDataProtection()
        .PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
        .SetApplicationName("SharedCookieApp");
}

还有一个问题:什么是 SharedCookie 字符串?它是随机字符串还是编码了一些用户数据?我可以从 SharedCookie 中提取任何信息,例如用户 ID 吗?

是的,我可以通过以下方式提取用户的 ID、电子邮件:

var id = HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier);
var email = HttpContext.User.FindFirstValue(ClaimTypes.Email);
于 2021-12-06T15:03:03.413 回答