OpenIddict Blazor-Server UI 迁移指南
Blazor 项目(非分层解决方案)
在 MyApplication.Blazor.csproj 中,将项目引用:
<PackageReference Include="Volo.Abp.AspNetCore.Authentication.JwtBearer" Version="6.0.*" /> <PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.*" />替换为
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.*" />在 MyApplicationBlazorModule.cs 中,替换 using 语句和模块依赖项:
using System; using System.Net.Http; using Volo.Abp.AspNetCore.Authentication.JwtBearer; ... typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAccountWebIdentityServerModule),替换为
using OpenIddict.Validation.AspNetCore; ... typeof(AbpAccountWebOpenIddictModule),在 MyApplicationBlazorModule.cs 中,添加如下所示的
PreConfigureServices方法,并将你的应用程序名称作为受众:public override void PreConfigureServices(ServiceConfigurationContext context) { PreConfigure<OpenIddictBuilder>(builder => { builder.AddValidation(options => { options.AddAudiences("MyApplication"); // 替换为你的应用程序名称 options.UseLocalServer(); options.UseAspNetCore(); }); }); }在 MyApplicationBlazorModule.cs 的
ConfigureServices方法中,替换方法调用:从
ConfigureAuthentication(context, configuration);替换为ConfigureAuthentication(context);,并按如下方式更新方法:private void ConfigureAuthentication(ServiceConfigurationContext context) { context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme); }在 MyApplicationBlazorModule.cs 的
OnApplicationInitialization方法中,替换中间件:app.UseJwtTokenMiddleware(); app.UseIdentityServer();替换为
app.UseAbpOpenIddictValidation();
Blazor 项目(分层解决方案)
在 MyApplicationWebModule.cs 中,更新
AddAbpOpenIdConnect配置:.AddAbpOpenIdConnect("oidc", options => { options.Authority = configuration["AuthServer:Authority"]; options.RequireHttpsMetadata = Convert.ToBoolean(configuration["AuthServer:RequireHttpsMetadata"]); options.ResponseType = OpenIdConnectResponseType.CodeIdToken; options.ClientId = configuration["AuthServer:ClientId"]; options.ClientSecret = configuration["AuthServer:ClientSecret"]; options.SaveTokens = true; options.GetClaimsFromUserInfoEndpoint = true; options.Scope.Add("roles"); // 将 "role" 替换为 "roles" options.Scope.Add("email"); options.Scope.Add("phone"); options.Scope.Add("MyApplication"); });将 role 作用域替换为 roles。
IdentityServer 项目
该项目的名称在 v6.0.0 之后已重命名为 AuthServer。你也可以重构并将你的项目重命名为 AuthServer,以便将来更容易更新。
在 MyApplication.IdentityServer.csproj 中,将项目引用:
<PackageReference Include="Volo.Abp.Account.Web.IdentityServer" Version="6.0.*" />替换为
<PackageReference Include="Volo.Abp.Account.Web.OpenIddict" Version="6.0.*" />在 MyApplicationIdentityServerModule.cs 中,替换 using 语句和模块依赖项:
typeof(AbpAccountWebIdentityServerModule),替换为
typeof(AbpAccountWebOpenIddictModule),在 MyApplicationIdentityServerModule.cs 中,添加如下所示的
PreConfigureServices方法,并将你的应用程序名称作为受众:public override void PreConfigureServices(ServiceConfigurationContext context) { PreConfigure<OpenIddictBuilder>(builder => { builder.AddValidation(options => { options.AddAudiences("MyApplication"); // 替换为你的应用程序名称 options.UseLocalServer(); options.UseAspNetCore(); }); }); }在 MyApplicationIdentityServerModule.cs 的
OnApplicationInitialization方法中,移除 IdentityServer 中间件:app.UseIdentityServer();
Http.Api.Host 项目
在 MyApplicationHttpApiHostModule.cs 的
OnApplicationInitialization方法中,删除app.UseAbpSwaggerUI选项配置中不再需要的c.OAuthClientSecret(configuration["AuthServer:SwaggerClientSecret"]);行。在
appsettings.json中,从 AuthServer 部分删除 SwaggerClientSecret,如下所示:"AuthServer": { "Authority": "https://localhost:44345", "RequireHttpsMetadata": "false", "SwaggerClientId": "MyApplication_Swagger" },要使用新的 AuthServer 页面,请将 Index.cshtml.cs 替换为 AuthServer Index.cshtml.cs,并将 Index.cshtml 文件替换为 AuthServer Index.cshtml,并将 Ids2OpenId 重命名为你的应用程序命名空间。
注意:这些文件可以在 Pages 文件夹下找到。
抠丁客


