项目

身份认证服务器模块(专业版)

您必须拥有 ABP团队或更高级别的许可证 才能使用此模块。

此模块为身份认证服务器提供集成和管理功能;

  • 基于 IdentityServer4 库构建。
  • 管理系统中的客户端身份资源API资源
  • 为客户端设置权限
  • 轻松创建标准身份资源(如角色、个人资料)。
  • 创建自定义身份资源
  • 管理API资源

有关模块功能的概述,请参阅模块描述页面

如何安装

身份认证服务器模块已在 启动模板 中预安装。因此,无需手动安装。

此模块遵循 模块开发最佳实践指南,由多个NuGet和NPM包组成。如果您想了解这些包及其之间的关系,请参阅该指南。

您可以访问身份认证模块包列表页面查看与此模块相关的包列表。

用户界面

菜单项

身份认证服务器模块将以下项目添加到“管理”菜单项下的“主”菜单中:

  • 客户端:客户端管理页面。
  • 身份资源:身份资源管理页面。
  • API资源:API资源管理页面。

AbpIdentityServerMenuNames 类包含菜单项名称的常量。

页面

客户端管理

客户端页面用于管理身份认证服务器客户端。客户端代表可以从您的身份认证服务器请求令牌的应用程序。

身份认证服务器客户端页面

您可以在此页面创建新客户端或编辑现有客户端:

身份认证服务器编辑客户端模态框

身份资源管理

身份资源页面用于管理身份认证服务器的身份资源。身份资源是诸如用户ID、姓名或电子邮件地址之类的数据。

身份认证服务器身份资源页面

您可以在此页面创建新的身份资源或编辑现有身份资源:

身份认证服务器编辑身份资源模态框

此页面允许使用“创建标准资源”按钮创建标准身份资源(角色、个人资料、电话、openid、电子邮件和地址)。

API资源管理

身份认证服务器模块允许管理API资源。要允许客户端为API请求访问令牌,您需要定义API资源。

身份认证服务器API资源页面

您可以在此页面创建新的API资源或编辑现有API资源:

身份认证服务器编辑API资源模态框

数据种子

此模块在运行 .DbMigrator 应用程序时向数据库添加一些初始数据(参见数据种子系统):

  • 创建标准身份资源,包括角色、个人资料、电话、openid、电子邮件和地址。

您可以在身份资源管理页面中删除或编辑创建的标准身份资源。您还可以使用“创建标准资源”按钮在身份资源管理页面中重新创建标准身份资源。

选项

AbpIdentityServerBuilderOptions

AbpIdentityServerBuilderOptions 可以在身份认证服务器模块PreConfigureServices 方法中配置。示例:

public override void PreConfigureServices(ServiceConfigurationContext context)
{
    PreConfigure<AbpIdentityServerBuilderOptions>(builder =>
    {
        //在此设置选项...
    });
}

AbpIdentityServerBuilderOptions 属性:

  • UpdateJwtSecurityTokenHandlerDefaultInboundClaimTypeMap(默认值:true):更新 JwtSecurityTokenHandler.DefaultInboundClaimTypeMap 以与身份认证服务器声明兼容。
  • UpdateAbpClaimTypes(默认值:true):更新 AbpClaimTypes 以与身份认证服务器声明兼容。
  • IntegrateToAspNetIdentity(默认值:true):集成到ASP.NET Identity。
  • AddDeveloperSigningCredential(默认值:true):设置为false以抑制在 IIdentityServerBuilder 上调用 AddDeveloperSigningCredential()

IIdentityServerBuilder 可以在身份认证服务器模块PreConfigureServices 方法中配置。示例:

public override void PreConfigureServices(ServiceConfigurationContext context)
{
    PreConfigure<IIdentityServerBuilder>(builder =>
    {
        builder.AddSigningCredential(...);
    });
}

内部结构

领域层

聚合

此模块遵循实体最佳实践与约定指南。

ApiResource

API资源是允许客户端请求访问令牌所必需的。

  • ApiResource(聚合根):表示系统中的API资源。
    • ApiSecret(集合):API资源的密钥。
    • ApiScope(集合):API资源的作用域。
    • ApiResourceClaim(集合):API资源的声明。
Client

客户端代表可以从您的身份认证服务器请求令牌的应用程序。

  • Client(聚合根):表示身份认证服务器客户端应用程序。
    • ClientScope(集合):客户端的作用域。
    • ClientSecret(集合):客户端的密钥。
    • ClientGrantType(集合):客户端的授权类型。
    • ClientCorsOrigin(集合):客户端的CORS来源。
    • ClientRedirectUri(集合):客户端的重定向URI。
    • ClientPostLogoutRedirectUri(集合):客户端的注销后重定向URI。
    • ClientIdPRestriction(集合):客户端的提供程序限制。
    • ClientClaim(集合):客户端的声明。
    • ClientProperty(集合):客户端的自定义属性。
PersistedGrant

持久授权存储授权码、刷新令牌和用户同意。

  • PersistedGrant(聚合根):表示身份认证服务器的持久授权。
IdentityResource

身份资源是诸如用户ID、姓名或电子邮件地址之类的数据。

  • IdentityResource(聚合根):表示身份认证服务器的身份资源。
    • IdentityClaim(集合):身份资源的声明。

存储库

此模块遵循存储库最佳实践与约定指南。

为此模块定义了以下自定义存储库:

  • IApiResourceRepository
  • IClientRepository
  • IPersistentGrantRepository
  • IIdentityResourceRepository

领域服务

此模块遵循领域服务最佳实践与约定指南。

身份认证服务器模块不包含任何领域服务,但覆盖了以下服务:

  • AbpProfileService(当 AbpIdentityServerBuilderOptions.IntegrateToAspNetIdentity 为true时使用)
  • AbpClaimsService
  • AbpCorsPolicyService

设置

此模块未定义任何设置。

应用层

应用服务

  • ApiResourceAppService(实现 IApiResourceAppService):实现API资源管理UI的使用案例。
  • IdentityServerClaimTypeAppService(实现 IIdentityServerClaimTypeAppService):用于获取声明列表。
  • ApiResourceAppService(实现 IApiResourceAppService):实现API资源管理UI的使用案例。
  • IdentityResourceAppService(实现 IIdentityResourceAppService):实现身份资源管理UI的使用案例。

数据库提供程序

通用

表/集合前缀和架构

所有表/集合默认使用 IdentityServer 前缀。如果您需要更改表前缀或设置架构名称(如果您的数据库提供程序支持),请设置 AbpIdentityServerDbProperties 类的静态属性。

连接字符串

此模块使用 AbpIdentityServer 作为连接字符串名称。如果您没有定义具有此名称的连接字符串,它将回退到 Default 连接字符串。

有关详细信息,请参阅连接字符串文档。

Entity Framework Core

  • IdentityServerApiResources
    • IdentityServerApiSecrets
    • IdentityServerApiScopes
      • IdentityServerApiScopeClaims
    • IdentityServerApiClaims
  • IdentityServerClients
    • IdentityServerClientScopes
    • IdentityServerClientSecrets
    • IdentityServerClientGrantTypes
    • IdentityServerClientCorsOrigins
    • IdentityServerClientRedirectUris
    • IdentityServerClientPostLogoutRedirectUris
    • IdentityServerClientIdPRestrictions
    • IdentityServerClientClaims
    • IdentityServerClientProperties
  • IdentityServerPersistedGrants
  • IdentityServerIdentityResources
    • IdentityServerIdentityClaims

MongoDB

集合
  • IdentityServerApiResources
  • IdentityServerClients
  • IdentityServerPersistedGrants
  • IdentityServerIdentityResources

权限

查看 AbpIdentityServerPermissions 类的成员,了解为此模块定义的所有权限。

Angular UI

安装

要将应用程序配置为使用身份认证服务器,首先需要从 @volo/abp.ng.identity-server/config 导入 provideIdentityServerConfig 到根配置。然后,将其附加到 appConfig 数组。

// app.config.ts
import { provideIdentityServerConfig } from '@volo/abp.ng.identity-server/config';

export const appConfig: ApplicationConfig = {
  providers: [
    // ...
    provideIdentityServerConfig()
  ],
};

身份认证服务器模块应在您的路由模块中导入并懒加载。它有一个静态的 createRoutes 方法用于配置。可用选项如下所示。可以从 @volo/abp.ng.identity-server 导入。

// app.routes.ts
const APP_ROUTES: Routes = [
  // 其他路由定义
  {
    path: 'identity-server',
    loadChildren: () =>
      import('@volo/abp.ng.identity-server').then(c => c.createRoutes(/* 此处传递选项 */)),
  },
];

如果您是通过启动模板生成的项目,则无需执行任何操作,因为这两个文件已经配置好了。

选项

您可以通过将以下选项传递给 createRoutes 静态方法来修改模块页面的外观和行为:

服务/模型

身份认证服务器模块的服务和模型是通过 ABP CLIgenerate-proxy 命令生成的。如果您需要该模块的代理,可以在Angular项目目录中运行以下命令:

abp generate-proxy --module identityServer

可替换组件

eIdentityServerComponents 枚举提供了所有可替换组件的键。可以从 @volo/abp.ng.identity-server 导入。

有关详细信息,请参阅组件替换文档

远程端点URL

身份认证服务器模块的远程端点URL可以在环境文件中配置。

export const environment = {
  // 其他配置
  apis: {
    default: {
      url: '默认URL',
    },
    AbpIdentityServer: {
      url: '身份认证服务器远程URL'
    }
    // 其他API配置
  },
};

上面显示的身份认证服务器模块远程URL配置是可选的。如果您未设置URL,则将使用 default.url 作为回退。

分布式事件

此模块为 Client 聚合和 ClientCorsOrigin 实体定义了事件。当 ClientClientCorsOrigin 更改时,AllowedCorsOriginsCacheItemInvalidator 会使 AllowedCorsOriginsCacheItem 的缓存失效。有关分布式事件的更多信息,请参阅 标准分布式事件

在本文档中