项目

IdentityServer 模块

IdentityServer 模块完整集成了 IdentityServer4 (IDS) 框架,提供单点登录和API访问控制等高级身份验证功能。该模块将客户端、资源和其他IDS相关对象持久化到数据库中。在ABP v6.0之后的启动模板中,此模块已被 OpenIddict 模块 取代

注意:IdentityServer和OpenIddict模块不能同时使用。它们是用于相同功能的独立OpenID提供商库。

安装方法

当您使用OpenIddict模块时,不需要此模块。但如果希望继续为应用程序使用IdentityServer4,可以安装此模块并移除OpenIddict模块。您可以继续将其作为包使用并轻松获取更新,也可以将其源代码包含到您的解决方案中(参见 get-source CLI 命令)以开发自定义模块。

源代码

此模块的源代码可在此处访问。源代码采用MIT许可,因此您可以自由使用和定制。

用户界面

该模块实现了领域逻辑和数据库集成,但不提供任何用户界面。如果您需要动态添加客户端和资源,管理界面会很有用。在这种情况下,您可以自行构建管理界面,或考虑购买提供此模块管理界面的ABP商业版

与其他模块的关系

此模块基于身份模块,并与账户模块有一个集成包

配置选项

AbpIdentityServerBuilderOptions

可以在您的Identity Server模块PreConfigureServices方法中配置AbpIdentityServerBuilderOptions。示例:

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

AbpIdentityServerBuilderOptions属性:

  • UpdateJwtSecurityTokenHandlerDefaultInboundClaimTypeMap(默认:true):更新JwtSecurityTokenHandler.DefaultInboundClaimTypeMap以兼容Identity Server声明。
  • UpdateAbpClaimTypes(默认:true):更新AbpClaimTypes以兼容Identity Server声明。
  • IntegrateToAspNetIdentity(默认:true):集成到ASP.NET Identity。
  • AddDeveloperSigningCredential(默认:true):设置为false以禁止在IIdentityServerBuilder上调用AddDeveloperSigningCredential()。

可以在您的Identity Server模块PreConfigureServices方法中配置IIdentityServerBuilder。示例:

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

内部实现

领域层

聚合

ApiResource

API资源用于允许客户端请求访问令牌。

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

客户端代表可以从您的Identity Server请求令牌的应用程序。

  • Client(聚合根):表示Identity Server客户端应用程序。
    • ClientScope(集合):客户端的作用域。
    • ClientSecret(集合):客户端的密钥。
    • ClientGrantType(集合):客户端的授权类型。
    • ClientCorsOrigin(集合):客户端的CORS来源。
    • ClientRedirectUri(集合):客户端的重定向URI。
    • ClientPostLogoutRedirectUri(集合):客户端的登出重定向URI。
    • ClientIdPRestriction(集合):客户端的提供商限制。
    • ClientClaim(集合):客户端的声明。
    • ClientProperty(集合):客户端的自定义属性。
PersistedGrant

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

  • PersistedGrant(聚合根):表示Identity Server的持久授权。
IdentityResource

身份资源是用户ID、姓名或电子邮件地址等数据。

  • IdentityResource(聚合根):表示Identity Server身份资源。
    • IdentityClaim(集合):身份资源的声明。

仓储

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

  • IApiResourceRepository
  • IClientRepository
  • IPersistentGrantRepository
  • IIdentityResourceRepository

领域服务

此模块不包含任何领域服务,但重写了以下服务:

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

设置

此模块未定义任何设置。

应用层

应用服务

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

数据库提供程序

通用配置

表/集合前缀和架构

所有表/集合默认使用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
在本文档中