OpenIddict Blazor Wasm UI 迁移指南
Blazor 项目
在 MyApplication.Blazor.csproj 中,将 项目引用:
<PackageReference Include="Volo.Abp.IdentityServer.Blazor.WebAssembly" Version="6.0.*" />替换为
<PackageReference Include="Volo.Abp.OpenIddict.Pro.Blazor.WebAssembly" Version="6.0.*" />在 MyApplicationBlazorModule.cs 中,替换 using 语句和 模块依赖:
using IdentityModel; using Volo.Abp.IdentityServer.Blazor.WebAssembly; ... typeof(AbpIdentityServerBlazorWebAssemblyModule),替换为
using OpenIddict.Abstractions; using Volo.Abp.OpenIddict.Pro.Blazor.WebAssembly; ... typeof(AbpOpenIddictProBlazorWebAssemblyModule),在 MyApplicationBlazorModule.cs 中,更新
ConfigureAuthentication方法:builder.Services.AddOidcAuthentication(options => { builder.Configuration.Bind("AuthServer", options.ProviderOptions); options.UserOptions.NameClaim = OpenIddictConstants.Claims.Name; // 添加此行 options.UserOptions.RoleClaim = OpenIddictConstants.Claims.Role; // 添加此行 options.ProviderOptions.DefaultScopes.Add("MyApplication"); options.ProviderOptions.DefaultScopes.Add("roles"); // 将 role 更新为 roles options.ProviderOptions.DefaultScopes.Add("email"); options.ProviderOptions.DefaultScopes.Add("phone"); });删除
options.UserOptions.RoleClaim = JwtClaimTypes.Role;,并将role作用域更新为roles。在 Navigation 文件夹下的 MyApplicationMenuContributor.cs 中,于
ConfigureMainMenuAsync方法下 替换 using 语句和菜单名称:using Volo.Abp.IdentityServer.Blazor.Navigation; ... //Administration->Identity Server administration.SetSubItemOrder(AbpIdentityServerMenuNames.GroupName, 2);替换为
using Volo.Abp.OpenIddict.Pro.Blazor.Menus; ... //Administration->OpenIddict administration.SetSubItemOrder(OpenIddictProMenus.GroupName, 2);
Http.Api.Host(非分离式 IdentityServer)
在 MyApplication.HttpApi.Host.csproj 中,将 项目引用:
<PackageReference Include="Volo.Abp.Account.Pro.Public.Web.IdentityServer" Version="6.0.*" />替换为
<PackageReference Include="Volo.Abp.Account.Pro.Public.Web.OpenIddict" Version="6.0.*" />在 MyApplicationHttpApiHostModule.cs 中,替换 using 语句和 模块依赖:
using IdentityServer4.Configuration; using Volo.Abp.AspNetCore.Authentication.JwtBearer; ... typeof(AbpAccountPublicWebIdentityServerModule),替换为
using OpenIddict.Validation.AspNetCore; ... typeof(AbpAccountPublicWebOpenIddictModule),在 MyApplicationHostModule.cs 中添加如下所示的
PreConfigureServices方法,并使用您的应用程序名称作为受众(audience):public override void PreConfigureServices(ServiceConfigurationContext context) { PreConfigure<OpenIddictBuilder>(builder => { builder.AddValidation(options => { options.AddAudiences("MyApplication"); // 替换为你的应用程序名称 options.UseLocalServer(); options.UseAspNetCore(); }); }); }在 MyApplicationHostModule.cs 的
ConfigureServices方法中,替换方法调用:从
ConfigureAuthentication(context, configuration);改为ConfigureAuthentication(context);,并按如下方式更新该方法:private void ConfigureAuthentication(ServiceConfigurationContext context) { context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme); }在 MyApplicationHostModule.cs 的
OnApplicationInitialization方法中,替换中间件:app.UseJwtTokenMiddleware(); app.UseIdentityServer();替换为
app.UseAbpOpenIddictValidation();删除
app.UseAbpSwaggerUI选项配置中不再需要的c.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);。在
appsettings.json中,从 AuthServer 部分删除 SwaggerClientSecret,如下所示:"AuthServer": { "Authority": "https://localhost:44345", "RequireHttpsMetadata": "false", "SwaggerClientId": "MyApplication_Swagger" },
Http.Api.Host(分离式 IdentityServer)
在 MyApplicationHttpApiHostModule.cs 的
OnApplicationInitialization方法中,删除app.UseAbpSwaggerUI选项配置中不再需要的c.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);。在
appsettings.json中,从 AuthServer 部分删除 SwaggerClientSecret,如下所示:"AuthServer": { "Authority": "https://localhost:44345", "RequireHttpsMetadata": "false", "SwaggerClientId": "MyApplication_Swagger" },
IdentityServer
自 v6.0.0 起,此项目已更名为 AuthServer。您也可以重构并将项目重命名为 AuthServer,以便将来更容易更新。
在 MyApplication.IdentityServer.csproj 中,将 项目引用:
<PackageReference Include="Volo.Abp.Account.Pro.Public.Web.IdentityServer" Version="6.0.*" />替换为
<PackageReference Include="Volo.Abp.Account.Pro.Public.Web.OpenIddict" Version="6.0.*" />在 MyApplicationIdentityServerModule.cs 中,替换 using 语句和 模块依赖:
using IdentityServer4.Configuration; using Volo.Abp.AspNetCore.Authentication.JwtBearer; ... typeof(AbpAccountPublicWebIdentityServerModule),替换为
using OpenIddict.Validation.AspNetCore; ... typeof(AbpAccountPublicWebOpenIddictModule),在 MyApplicationIdentityServerModule.cs 中添加如下所示的
PreConfigureServices方法,并使用您的应用程序名称作为受众(audience):public override void PreConfigureServices(ServiceConfigurationContext context) { PreConfigure<OpenIddictBuilder>(builder => { builder.AddValidation(options => { options.AddAudiences("MyApplication"); // 替换为你的应用程序名称 options.UseLocalServer(); options.UseAspNetCore(); }); }); }在 MyApplicationIdentityServerModule.cs 的
ConfigureServices方法中,替换 ForwardIdentityAuthenticationForBearer:context.Services.ForwardIdentityAuthenticationForBearer();替换为
context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);在 MyApplicationIdentityServerModule.cs 的
ConfigureServices方法中,移除 IdentityServerOptions 配置和 JwtBearer 选项:if (Convert.ToBoolean(configuration["AuthServer:SetSelfAsIssuer"])) // 移除 { Configure<IdentityServerOptions>(options => { options.IssuerUri = configuration["App:SelfUrl"]; }); } ... context.Services.AddAuthentication() // 移除 .AddJwtBearer(options => { options.Authority = configuration["AuthServer:Authority"]; options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.Audience = "MyApplication"; })在 MyApplicationIdentityServerModule.cs 的
OnApplicationInitialization方法中,替换中间件:app.UseJwtTokenMiddleware(); app.UseIdentityServer();替换为
app.UseAbpOpenIddictValidation();要使用新的 AuthServer 页面,请将 Index.cshtml.cs 替换为 AuthServer Index.cshtml.cs,并将 Index.cshtml 文件替换为 AuthServer Index.cshtml。
注意:这些文件位于 Pages 文件夹下。
抠丁客


