【发布时间】:2020-04-08 05:38:26
【问题描述】:
我有一个服务器端的 Blazor 应用程序。每个用户在访问页面时都必须经过身份验证。为此,用户被重定向到“身份服务器”登录页面。当用户使用正确的凭据登录时,他会被重定向回 Blazor 应用程序。
我已经使用 CascadingAuthenticationState 设置了我的 Blazor 应用程序,这样我就可以在我的 Blazor 页面中访问 User 对象及其声明。
在组件内部是这样的:
[CascadingParameter]
private Task<AuthenticationState> AuthenticationStateTask { get; set; }
...
...
var authState = await AuthenticationStateTask;
var claims = authState.User.Claims; // Works fine.
当我这样做时,我可以访问用户声明。
到目前为止一切顺利。
但我也有一个 middleware 类,我需要在其中访问用户声明。
public async Task InvokeAsync(HttpContext context)
{
if (context?.User?.Claims != null && context.User.Claims.Any())
{
Console.WriteLine("aaa");
}
// Call the next delegate/middleware in the pipeline
await _next(context);
}
但由于某种原因,User 声明始终为空。
为什么我的 Blazor 组件内部的 User.Claims 对象充满了所有声明,但当我通过 HttpContext 对象访问它们时它们是空的?
【问题讨论】:
-
注册中间件的顺序很重要。如果您在身份验证中间件之前调用中间件 - 您将看不到任何值。你能确认你在 app.UseAuthentication & app.UseAuthorization 之后添加中间件吗?
-
@Dennis1679 谢谢,这就是问题所在...您能否提供它作为我可以接受的答案。
-
好的,我会写出来的。
标签: .net-core asp.net-identity blazor blazor-server-side .net-core-3.1