BI如何实现用户身份集成自定义安全程序开发(上)

统一身份认证是整个 IT 架构的最基本的组成部分,而账号则是实现统一身份认证的基础。做好账号的规划和设计直接决定着企业整个信息系统建设的便利与难易程度,决定着系统能否足够敏捷和快速赋能,也决定了在数字化转型中的投入和效率。

用户账号是用户身份的一种表示,传统统一身份认证系统往往被作为外围系统来集成各个应用系统,而不是作为核心基础系统被其他应用系统来集成。所以传统统一身份认证系统的建设存在众多的问题,使设计实现复杂化、管理复杂化、集成复杂化。

每个企业可能同时会有多套系统在运行,但每个用户的账号在企业中仅有一套,可以适用于各个系统当中。因此,这就涉及到我们如何将一套账号应用到各个系统中,保证账号的权限体系。

常见方法:

1. (最简单但最深恶痛绝的)数据复制一份导入到每一套系统中。这样会造成维护工作量大,数据混乱,如果是多级企业,将会发生难以想象的灾难。

2. 在身份集成中,自定义安全程序的开发,用一套用户身份验证程序,集成到各个系统中。

本文将从以下三点来介绍如何编写自定义安全提供程序,并在项目中配置引用:

  • 编写自定义安全提供程序
  • 配置自定义安全提供程序
  • 注意事项

编写自定义安全提供程序

编写一个自定义安全提供程序的步骤如下:

(1) 创建项目

使用Microsoft Visual Studio 2017(以下简称VS2017),创建一个新的项目,类型选为 Visual C# - .NET Standard - 类库(.NET Standard),输入项目名称,如:MySecurityProvider:

(配置过程图示)

(2) 添加程序包依赖

自定义安全提供程序所实现的接口是由几个程序包定义的,为此需要添加对这几个程序包的依赖。方法如下:

首先将下面这两个文件下载保存到本地硬盘,比如C:\Temp\pkg 文件夹下:

grapecity.enterprise.identity.externalidentityprovider.1.0.2.nupkg

GrapeCity.Enterprise.Identity.SecurityProvider.1.0.3.nupkg

单击VS2017的“工具”菜单的“NuGet包管理器”>“程序包管理器设置”:

(配置过程图示)

选中“程序包源”,再单击加号按钮:

(配置过程图示)

单击【...】按钮,指定“”的路径为nupkg文件所在的文件夹,如:C: emp\pkg

单击“确定”按钮保存设置。

在右侧解决方案资源管理器窗格中,右键单击“依赖项”,点击“管理NuGet程序包”,再点击“浏览”,选中新添加的程序包源,将会列出两个需要依赖的程序包:

GrapeCity.Enterprise.Identity.ExternalIdentityProvider和GrapeCity.Enterprise.Identity.SecurityProvider,如下图:

(配置过程图示)

逐个选中程序包,点击“安装”,即可添加本项目对这两个程序包的依赖。

(3) 实现接口

自定义安全提供程序需要实现两个接口:ISecurityProviderFactory和ISecurityProvider。

实现第一个接口的操作步骤:

添加一个新的类文件,如MySecurityProviderFactory.cs,以实现ISecurityProviderFactory接口。

public class MySecurityProviderFactory: ISecurityProviderFactory

该接口规定了两个属性和一个方法:

public string Description // 本安全提供程序的描述字串。

public IEnumerable SupportedSettings // 本安全提供程序支持的用户配置项。

这些用户配置项将出现在Wyn的管理画面中,允许系统管理员进行设置。典型的配置项是用户信息数据库的连接字串。通过提供这种配置项目,可以避免在安全提供程序中硬编码用户信息数据库连接字串的问题。

public Task CreateAsync(IEnumerable settings) // 本安全提供程序的实例创建方法。

这个方法的内容几乎是固定的,如:

实现ISecurityProvider接口

这个ISecurityProvider接口是安全提供程序的核心,其规定的属性和方法如下:

除了上表所列成员,还有IExternalUserDescriptor,IExternalUserContext等接口,这些接口只是规定了实体类的属性,使用自定义类实现这些接口即可。

此示例代码中的解决方案(.sln)可在Visual Studio 2017中直接打开。示例代码文件夹\bin\debug中也包含Build产物DLL,可直接配置为Wyn的安全提供程序。示例的用户信息是保存在SQL Server数据库中的,请将本文件包中的db\MyUsers.bak文件恢复为SQL Server数据库。

接口介绍

ISecurityProviderFactory接口

定义

接口说明

ISecurityProvider接口

定义

接口说明

IExternalUserDescriptor接口

定义

接口说明

IExternalUserContext接口

定义

接口说明

注意

  • 在每个接口的实现函数中,必须有try-catch异常处理,在catch的异常处理部分,不要用throw语句再次抛出异常,而应返回Task对象,例如:return Task.FromResult(null); 其中T为接口函数规定的某个类型。
  • 用户上下文的key不要用以下字符串:sub,name,auth_time,idp,userid,email
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章