已签入委托人,但 User.Identity.IsAuthenticated 为 False 且 HttpContext.AuthenticateAsync 为 False
Signed In Principal but User.Identity.IsAuthenticated is False and HttpContext.AuthenticateAsync is False
我已经手动登录到 .NET Core 3 Web API 应用程序,如下面的控制器操作所示。无论我尝试什么,我似乎都无法让 .NET 框架识别应用程序用户已登录。我在 Visual Studio 中进行本地测试,但是当我在服务器上测试时也会反映出这种行为以及。为什么我在 HttpContext.SignInAsync 方法中创建和使用的主体没有被发送到中间件(至少看起来好像没有)?
注意:我看到有些帖子用户说您必须先登录,然后再向服务器发出另一个请求,新主体才能生效。我已经试过了,但结果是一样的。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//........
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = DefaultAuthenticationTypes.ApplicationCookie;
})
.AddCookie(DefaultAuthenticationTypes.ApplicationCookie, options =>
{
// true by default
options.SlidingExpiration = true;
// 14 days by default
options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
options.Cookie.IsEssential = true;
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = SameSiteMode.None;
options.LoginPath = "/Login";
options.LogoutPath = "/Logout";
});
services.AddAuthorization();
//........
}
public void Configure(IApplicationBuilder app)
{
//........
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.UseCors();
//........
}
控制器操作:
ClaimsIdentity userIdentity =
new ClaimsIdentity(jwtSecurityToken.Claims, DefaultAuthenticationTypes.ApplicationCookie);
ClaimsPrincipal principal =
new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(DefaultAuthenticationTypes.ApplicationCookie, principal,
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
});
AuthenticateResult authenticateResult =
await httpContext.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);
//This always returns false!!!
User.Identity.IsAuthenticated
//This always returns false!!!
我讨厌这样做,但这段代码确实有效。如果您直接通过浏览器点击此代码,代码会按预期登录,并且一切正常。
我想做的是在后端使用 .NET Core 3 Web API 2 应用程序,通过 Vue.js 前端应用程序让它工作。出于某种原因,Vue 应用程序无法登录后端应用程序。当我在 Vue 主页上点击 API 操作通过 Vue 代码登录时,.NET 代码登录时没有错误,但在任何其他页面上从 VUE 应用程序调用,.NET 应用程序说用户未经授权。我怀疑 cookie 的存储方式和 cookie 周围的数据隐私有问题。
在这个问题的上下文中,这段代码按预期工作。谢谢。
我已经手动登录到 .NET Core 3 Web API 应用程序,如下面的控制器操作所示。无论我尝试什么,我似乎都无法让 .NET 框架识别应用程序用户已登录。我在 Visual Studio 中进行本地测试,但是当我在服务器上测试时也会反映出这种行为以及。为什么我在 HttpContext.SignInAsync 方法中创建和使用的主体没有被发送到中间件(至少看起来好像没有)?
注意:我看到有些帖子用户说您必须先登录,然后再向服务器发出另一个请求,新主体才能生效。我已经试过了,但结果是一样的。
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
//........
services.AddAuthentication(options =>
{
options.DefaultAuthenticateScheme = DefaultAuthenticationTypes.ApplicationCookie;
})
.AddCookie(DefaultAuthenticationTypes.ApplicationCookie, options =>
{
// true by default
options.SlidingExpiration = true;
// 14 days by default
options.ExpireTimeSpan = TimeSpan.FromMinutes(120);
options.Cookie.IsEssential = true;
options.Cookie.HttpOnly = true;
options.Cookie.SameSite = SameSiteMode.None;
options.LoginPath = "/Login";
options.LogoutPath = "/Logout";
});
services.AddAuthorization();
//........
}
public void Configure(IApplicationBuilder app)
{
//........
app.UseAuthentication();
app.UseAuthorization();
app.UseSession();
app.UseCors();
//........
}
控制器操作:
ClaimsIdentity userIdentity =
new ClaimsIdentity(jwtSecurityToken.Claims, DefaultAuthenticationTypes.ApplicationCookie);
ClaimsPrincipal principal =
new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync(DefaultAuthenticationTypes.ApplicationCookie, principal,
new AuthenticationProperties
{
IsPersistent = true,
ExpiresUtc = DateTime.UtcNow.AddDays(7)
});
AuthenticateResult authenticateResult =
await httpContext.AuthenticateAsync(DefaultAuthenticationTypes.ApplicationCookie);
//This always returns false!!!
User.Identity.IsAuthenticated
//This always returns false!!!
我讨厌这样做,但这段代码确实有效。如果您直接通过浏览器点击此代码,代码会按预期登录,并且一切正常。
我想做的是在后端使用 .NET Core 3 Web API 2 应用程序,通过 Vue.js 前端应用程序让它工作。出于某种原因,Vue 应用程序无法登录后端应用程序。当我在 Vue 主页上点击 API 操作通过 Vue 代码登录时,.NET 代码登录时没有错误,但在任何其他页面上从 VUE 应用程序调用,.NET 应用程序说用户未经授权。我怀疑 cookie 的存储方式和 cookie 周围的数据隐私有问题。
在这个问题的上下文中,这段代码按预期工作。谢谢。