【问题标题】:Blazor navigation with authorization header and bearer token带有授权标头和不记名令牌的 Blazor 导航
【发布时间】:2020-03-11 11:43:36
【问题描述】:

我想通过 HealthChecksUI 创建 HealthChecks 门户,但访问权限有限。
我也使用 Blazor 来完成授权对话框的创建和接收访问令牌。

所以我配置了 HealthChecksUI:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    //...
    app.UseEndpoints(endpointsBuilder =>
    {
        //...
        endpointsBuilder.MapHealthChecksUI(setup =>
        {
            setup.UIPath = "/portal";
            setup.ApiPath = "/portal/api";
            setup.WebhookPath = "/portal/webhooks";
            setup.ResourcesPath = "/portal/resources";
        }).RequireAuthorization(); // This means access to '/portal' route will be limited by authorization.
        //...
    }
    //...
}

我在执行任何请求时在 HTTP Authorization header 中使用 bearer token 进行授权。

接下来让我们检查授权工作:
来自 POSTMAN 的 GET 请求,带有有效的不记名令牌到 '/portal' 路由成功通过。另外,如果我更改令牌,则会收到 401 Unauthorized 错误。所以看来授权系统工作正常。

下一步将使用授权对话框来执行令牌接收和重定向到门户页面。
下面的代码只是一个在 .razor 页面中使用的简单授权功能

private async Task SubmitAsync()
{
    var (authorizationSuccessful, accessToken) = await authorizationService.AuthorizeAsync(authorizationData).ConfigureAwait(false);

    if (authorizationSuccessful)
    {
        navigationManager.NavigateTo("/portal", true);
    }
    else
    {
        throw new UnauthorizedAccessException("Incorrect login or password");
    }
}

所以问题是:
当授权通过(authorizationSuccessfultrue)并执行导航时,我进入“/portal”页面而没有任何授权数据,因此出现 401 Unauthorized 错误。

问题是:

如何通过Authorization HTTP Header 中的NavigateTo 方法传递接收到的不记名令牌(accessToken)以完成对“/portal”页面的授权访问?有没有可能?

【问题讨论】:

    标签: c# routing navigation authorization blazor


    【解决方案1】:

    很遗憾,不可能以这种方式完成这项任务。

    根据尝试仅使用 JS(thisthis)执行此类操作,无法使用普通 JS。

    所以我们这里只有几个选择:

    通过 cookie 共享授权令牌

    Cookie 是基于浏览器的共享存储,因此可以在导航后立即从此处检查访问令牌。

    通过查询发送授权令牌

    NavigateTo 方法可以与这样的查询参数一起使用:

    navigationManager.NavigateTo($"/portal?token={accessToken}", true);
    

    所以我们可以直接从查询参数中检查访问令牌。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 2015-05-26
      • 2021-01-01
      • 2018-09-22
      • 1970-01-01
      相关资源
      最近更新 更多