如何正确实现服务器端blazor自定义授权提供程序

问题描述 投票:0回答:1

我正在尝试在服务器端的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()

我不想让堆栈跟踪变得混乱。

这可以实现,如果可以实现吗?

c# blazor claims-based-identity blazor-server-side iprincipal
1个回答
0
投票

您提供链接的示例应用程序旨在在客户端Blazor应用程序中使用,但是您正在尝试实现服务器端Blazor自定义授权提供程序。在这方面,Blazor Server应用程序和Blazor WebAssembly应用程序之间存在巨大差异。此外,本文也不提供完整的解决方案。实际上,这是一种概念证明的尝试,着眼于AuthorizeView对象的微不足道的功能(Authorizing)。

通常来说,在Blazor Server App中实现AuthenticationStateProvider并不是必须的,并且可能会引入安全漏洞。也许您应该专注于身份验证方法,例如,如果您创建Web Api服务等,则使用身份身份验证(采用IdentityUI),JWT令牌身份验证。

至于授权,它在客户端和服务器端或多或少都采用Blazor的内置组件。

据我所记得,我已经回答了几个问题。尝试寻找它们。我相信Chris Sainty中有一篇或多篇文章都包含有关该主题的完整代码。

希望这有帮助...

© www.soinside.com 2019 - 2024. All rights reserved.