我已经在.NET Core 3.1中建立了一个Blazor应用程序,并且正在实现身份验证/授权,但很明显,我对默认身份验证的工作原理没有很好的理解。
我设置了一个"AuthorizeView"标签,如下所示,完全预计它会失败:
<AuthorizeView Context="auth" Roles="Admin">
<Authorized>
Content
</Authorized>
<NotAuthorized>
You do not have access to this page.
</NotAuthorized>
</AuthorizeView>
但相反,它运行良好。我可以看到"内容"部分,尽管我没有设置任何授权。我假设这默认为Windows身份验证(这是我在Blazor应用程序中使用的(,但我没有指定在任何地方使用AD授权。
有人能告诉我我会去哪里,或者帮助我了解默认情况下是如何工作的,以及它从哪里获得这个"管理员"角色吗?
您可以使用授权来控制和限制对资源的访问。您可以根据用户的角色、声明和授权策略来控制访问。
使用上面的AuthorizeView并将Roles属性设置为"Admin",可以告诉Blazor,如果用户属于Admin角色,则他有权访问authorized元素中的内容。
我猜你已经将Blazor应用程序设置为在创建应用程序时通过选择Windows身份验证来验证访问你的应用程序的用户,对吧?
当您尝试访问应用程序时,系统会要求您提供从IIS(express(传递到应用程序的凭据。。。
大致来说,Claims Principle(或Windows Principle(对象由Blazor创建,并作为AuthenticationState对象传递给名为ServerAuthenticationStateProvider的对象。这个对象,也就是说AuthenticationState对象也被提供给AuthorizeView,AuthorizeView的基类AuthorizeViewCore包含调用IAuthorizationService的逻辑,并将声明原则传递给它。现在,授权服务检查Claims Principle对象,它有什么声明,它有哪些角色,当然,它会查找值为"Admin"的角色声明,如果找到,则返回true,并在管道末端决定允许您访问受限制的内容。
从中提取此"管理员"角色的位置
从您的Windows AD(如果您有(或从Windows用户帐户等。记住,您告诉向导您要使用Windows身份验证(这是我的假设,否则我所说的一切都可能是错误的(。
您最好查看文档,熟悉AuthenticationStateProvider、ServiceAuthenticationStateProvider等服务。