【发布时间】: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");
}
}
所以问题是:
当授权通过(authorizationSuccessful 是 true)并执行导航时,我进入“/portal”页面而没有任何授权数据,因此出现 401 Unauthorized 错误。
问题是:
如何通过Authorization HTTP Header 中的NavigateTo 方法传递接收到的不记名令牌(accessToken)以完成对“/portal”页面的授权访问?有没有可能?
【问题讨论】:
标签: c# routing navigation authorization blazor