我正在尝试在服务器端的blazor项目中实现基本的自定义Auth提供程序,但是我在正确实现'IsAuthenticating'属性时遇到了一些困难。
我使用此站点作为起点,但是如果将[IsAuthenticating
]设置为true,则会引发错误(更具体地说,当我从GetAuthenticationStateAsync()
返回null时)。 https://gunnarpeipman.com/client-side-blazor-authorizeview/。
特别是这行代码:
if(IsAuthenticating)
{
return null; <---- This line throws error
}
else if(IsAuthenticated)
{
identity = new ClaimsIdentity(new List<Claim>
{
new Claim(ClaimTypes.Name, "TestUser")
}, "WebApiAuth");
}
else
{
identity = new ClaimsIdentity();
}
抛出的确切错误是:
NullReferenceException: Object reference not set to an instance of an object.
Microsoft.AspNetCore.Components.Authorization.AuthorizeViewCore.OnParametersSetAsync()
我不想让堆栈跟踪变得混乱。
这可以实现,如果可以实现吗?
您提供链接的示例应用程序旨在在客户端Blazor应用程序中使用,但是您正在尝试实现服务器端Blazor自定义授权提供程序。在这方面,Blazor Server应用程序和Blazor WebAssembly应用程序之间存在巨大差异。此外,本文也不提供完整的解决方案。实际上,这是一种概念证明的尝试,着眼于AuthorizeView对象的微不足道的功能(Authorizing)。
通常来说,在Blazor Server App中实现AuthenticationStateProvider并不是必须的,并且可能会引入安全漏洞。也许您应该专注于身份验证方法,例如,如果您创建Web Api服务等,则使用身份身份验证(采用IdentityUI),JWT令牌身份验证。
至于授权,它在客户端和服务器端或多或少都采用Blazor的内置组件。
据我所记得,我已经回答了几个问题。尝试寻找它们。我相信Chris Sainty中有一篇或多篇文章都包含有关该主题的完整代码。
希望这有帮助...