【问题标题】:Blazor cookie authenticationBlazor cookie 身份验证
【发布时间】:2020-02-27 03:25:10
【问题描述】:

请帮帮我,我不知道出了什么问题,我已经找了好几个小时了...

我想在 blazor 中的 cookie 上有一个用户登录组件。我需要能够从我的应用程序中所有位置的 cookie 中获取信息。

在我的Startup.cs我已经添加在ConfigureServices

services.Configure<CookiePolicyOptions>(options =>
{
    options.CheckConsentNeeded = context => true;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme).AddCookie();
services.AddHttpContextAccessor();
services.AddScoped<HttpContextAccessor>();
services.AddHttpClient();
services.AddScoped<HttpClient>();

在端点之前配置

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();

然后在应用程序中,我编写了登录代码

public async Task Login()
{
    var claims = new List<Claim> {
        new Claim(ClaimTypes.Name, "1", ClaimValueTypes.String),
        new Claim(ClaimTypes.Surname, "2", ClaimValueTypes.String),
        new Claim(ClaimTypes.Country, "3", ClaimValueTypes.String),
        new Claim("4", "4.1", ClaimValueTypes.String)
    };

    var userIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
    var authProperties = new AuthenticationProperties
        {
            ExpiresUtc = DateTime.UtcNow.AddMinutes(20),
            IsPersistent = false,
            AllowRefresh = false
        };
    var userPrincipal = new ClaimsPrincipal(userIdentity);

    await _httpContextAccessor.HttpContext.SignInAsync(
      CookieAuthenticationDefaults.AuthenticationScheme, 
      userPrincipal);
}

但我的浏览器中没有 cookie,代码/控制台中没有错误。

当我查看状态时

var z= _httpContextAccessor.HttpContext.SignInAsync(
    CookieAuthenticationDefaults.AuthenticationScheme, 
    userPrincipal).Status

然后我得到一个错误

System.Threading.Tasks.TaskStatus.Faulted 信息。

有人可以帮我吗?我需要一个身份验证和授权系统,可以按需提供有关用户的信息。

我会很感激你的帮助

谢谢

【问题讨论】:

  • 发布错误日志,可能会有所帮助
  • 我没有收到任何错误。故障信息是来自 signinasync 的状态。

标签: c# authentication cookies authorization blazor


【解决方案1】:

这是 Blazor 服务器还是 Blazor WebAssembly?

在任何情况下,您都不能在您的应用程序中使用 HttpContextAccessor。

这个_httpContextAccessor.HttpContext.SignInAsync 无法工作,因为 HttpContext 在 Blazor Server 中不可用。 不用说,HttpContext不能在浏览器上创建……

要么使用这个:services.AddHttpClient();

使用 IHttpClientFactory(推荐)

或者这个:services.AddScoped&lt;HttpClient&gt;();

在我看来,您对 Blazor 或 Blazor 的身份验证和授权系统都不熟悉。我建议您查阅文档并学习如何使用它们。它们非常出色,可以为您节省大量的硬编码时间。

希望这会有所帮助...

【讨论】:

  • 是的,我是 blazor 的新手。我尝试构建一个服务器端应用程序。你在考虑使用这个 AuthenticationStateProvider 服务吗?
  • Blazor 身份验证和授权系统定义了一系列可以在应用程序中使用的组件,例如AutherizeView 等。我在这里发布了一个链接,您可以从中开始学习,如果您有任何问题,欢迎在这里提问:docs.microsoft.com/en-us/aspnet/core/security/blazor/…
  • 具有基于策略的身份验证的 blazor 示例代码:github.com/chrissainty/PolicyBasedAuthWithBlazor
  • 好的,我看到我可以将自己的 AuthenticationStateProvider 与我需要的声明信息一起使用。问题我如何从我需要的地方的索赔中获取信息?使用 DI 或级联参数是吗?登录用户的生命周期可以在某处设置吗?示例不使用页面 1 小时 = 注销?
  • 此时我正在使用带有 customauthenticationstateprovider 的 AuthenticationStateProvider 并且我有关于我登录的用户的信息。我现在如何进行会话或用户可以保持登录状态的东西,例如周围1小时。然后会话关闭,需要第二次登录。现在信息存储在哪里,我不明白它到底:/请帮助
猜你喜欢
  • 2021-07-24
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 2021-04-30
  • 2021-04-22
  • 2021-11-05
  • 2020-11-02
  • 1970-01-01
相关资源
最近更新 更多