在Blazor应用程序中,Startup使用标准ASP.NET Core中间件在类中配置身份验证和授权。
app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapControllers(); endpoints.MapBlazorHub(); endpoints.MapFallbackToPage("/_Host"); });使用ASP.NET Core Identity时,所有与身份相关的UI问题都由框架提供的默认身份UI处理。
services.AddDefaultIdentity<IdentityUser>() .AddEntityFrameworkStores<ApplicationDbContext>();应用程序顶行中的身份验证相关链接使用新的内置AuthorizeView组件呈现,该组件根据身份验证状态显示不同的内容。
LoginDisplay.razor
<AuthorizeView> <Authorized> <a href="http://www.likecs.com/Identity/Account/Manage">Hello, @context.User.Identity.Name!</a> <a href="http://www.likecs.com/Identity/Account/LogOut">Log out</a> </Authorized> <NotAuthorized> <a href="http://www.likecs.com/Identity/Account/Register">Register</a> <a href="http://www.likecs.com/Identity/Account/Login">Log in</a> </NotAuthorized> </AuthorizeView>该AuthorizeView组件仅在授权用户时显示其子内容。可替代地,AuthorizeView采用参数用于指定不同模板当用户是Authorized,NotAuthorized,或Authorizing。当前的身份验证状态通过隐式context参数传递给这些模板。您还可以指定AuthorizeView用户必须满足的特定角色或授权策略才能查看授权视图。
要授权访问Blazor应用程序中的特定页面,请使用普通的[authorize]属性。可以使用新的@attribute指令将[authorize]属性应用于组件。。
@using Microsoft.AspNetCore.Authorization @attribute [Authorize] @page "/fetchdata"要指定在未授权用户或仍处于授权处理时需要授权的页面上显示的内容,请使用组件上的NotAuthorizedContent和AuthorizingContent参数Router。这些Router参数仅在此版本的客户端Blazor中提供支持,但在将来的更新中将为服务器端Blazor启用它们。
AuthenticationStateProvider无论是在服务器上运行还是在浏览器中运行客户端,新服务都会以统一的方式使Blazor应用程序可以使用身份验证状态。在服务器端Blazor应用程序中AuthenticationStateProvider,用户从HttpContext建立与服务器的连接的表面。客户端Blazor应用程序可以根据应用程序配置自定义AuthenticationStateProvider。例如,它可以通过查询服务器上的端点来检索当前用户信息。
Task<AuthenticationState>使用该CascadingAuthenticationState组件将身份验证状态作为级联值提供给应用程序。然后,AuthorizeView和Router组件使用此级联值来授权对UI的特定部分的访问。
App.razor
<CascadingAuthenticationState> <Router AppAssembly="typeof(Startup).Assembly"> <NotFoundContent> <p>Sorry, there's nothing at this address.</p> </NotFoundContent> </Router> </CascadingAuthenticationState> Razor类库中的静态资产Razor类库现在可以包含静态资源,如JavaScript,CSS和图像。然后,可以通过引用Razor类库项目或通过包引用将这些静态资产包含在ASP.NET Core应用程序中。
要在Razor类库中包含静态资源,请将一个wwwroot文件夹添加到Razor类库中,并在该文件夹中包含所有必需的文件。
当具有静态资产的Razor类库被引用为项目引用或作为包时,来自库的静态资源在路径前缀*_content / {LIBRARY NAME} /*下可供应用程序使用。静态资源保留在其原始文件夹中,Razor类库中静态资产内容的任何更改都会反映在应用程序中而不进行重建。
发布应用程序后,所有引用的Razor类库中的伴随资源将以相同的前缀复制到已发布应用程序的wwwroot文件夹中。
要尝试使用Razor类库中的静态资源:
创建默认的ASP.NET Core Web App。
dotnet new webapp -o WebApp1
创建一个Razor类库并从Web应用程序引用它。
dotnet new razorclasslib -o RazorLib1 dotnet add WebApp1 reference RazorLib1
将wwwroot文件夹添加到Razor类库,并包含一个JavaScript文件,该文件将简单消息记录到控制台。
cd RazorLib1 mkdir wwwroothello.js
console.log("Hello from RazorLib1!");
从Web应用程序中的Index.cshtml引用脚本文件。
<script src="http://www.likecs.com/_content/RazorLib1/hello.js"></script>
运行应用程序并在浏览器控制台中查找输出。
Hello from RazorLib1! 项目现在默认使用System.Text.Json现在,新的ASP.NET Core项目将默认使用System.Text.Json进行JSON处理。在此版本中,我们从项目模板中删除了Json.NET(Newtonsoft.Json)。要启用对使用Json.NET的支持,请将Microsoft.AspNetCore.Mvc.NewtonsoftJson包添加到项目中,并AddNewtonsoftJson()在Startup.ConfigureServices方法中添加对以下代码的调用。例如:
services.AddMvc() .AddNewtonsoftJson(); 证书和Kerberos身份验证预览6为ASP.NET Core带来了证书和Kerberos身份验证。