项目

OpenIddict Angular UI 迁移指南

Angular 项目

  • environment.tsenvironment.prod.ts 文件中,在颁发者(issuer)的末尾添加一个斜杠

    oAuthConfig: {
        issuer: 'https://localhost:44377/',
        ...
      },
    

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 Volo.Abp.AspNetCore.Authentication.JwtBearer;
    using IdentityServer4.Configuration;
    ...
    typeof(AbpAccountPublicWebIdentityServerModule),
    

    替换为

    using OpenIddict.Validation.AspNetCore;
    ...
    typeof(AbpAccountPublicWebOpenIddictModule),
    
  • MyApplicationHttpApiHostModule.cs 文件中,添加如下所示的 PreConfigureServices 方法,并使用您的应用程序名称作为受众:

    public override void PreConfigureServices(ServiceConfigurationContext context)
    {
        PreConfigure<OpenIddictBuilder>(builder =>
        {
            builder.AddValidation(options =>
            {
                options.AddAudiences("MyApplication"); // 替换为您的应用程序名称
                options.UseLocalServer();
                options.UseAspNetCore();
            });
        });
    }
    
  • MyApplicationHttpApiHostModule.cs 文件的 ConfigureServices 方法中,替换方法调用

    ConfigureAuthentication(context, configuration); 替换为 ConfigureAuthentication(context);,并按如下方式更新该方法:

    private void ConfigureAuthentication(ServiceConfigurationContext context)
    {
        context.Services.ForwardIdentityAuthenticationForBearer(OpenIddictValidationAspNetCoreDefaults.AuthenticationScheme);
    }
    
  • MyApplicationHttpApiHostModule.cs 文件的 OnApplicationInitialization 方法中,替换中间件

    app.UseJwtTokenMiddleware();
    app.UseIdentityServer();
    

    替换为

    app.UseAbpOpenIddictValidation();
    
  • MyApplicationHttpApiHostModule.cs 文件的 OnApplicationInitialization 方法中,删除 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 Microsoft.AspNetCore.Authentication.JwtBearer;
    ...
    typeof(AbpAccountPublicWebIdentityServerModule),
    

    替换为

    using OpenIddict.Validation.AspNetCore;
    ...
    typeof(AbpAccountPublicWebOpenIddictModule),
    
  • MyApplicationIdentityServerModule.cs 文件中,添加如下所示的 PreConfigureServices 方法,并使用您的应用程序名称作为受众:

    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 页面,请用 AuthServer Index.cshtml.cs 替换 Index.cshtml.cs,并用 AuthServer Index.cshtml 替换 Index.cshtml 文件。

    注意:这些文件位于 Pages 文件夹下。

另请参阅

在本文档中