从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能。细化了很多权限操作。

今天对这一块做个介绍。

要做一个认证管理,大概分为以下5步:

1.  定义你要保护的资源,一般是服务、函数,当然你只要不限麻烦,可以是任何东西;

2.  定义使用者(用户);

3.  定义角色,使用者通过角色与服务器打交道;

4.  定义角色或用户可以访问的资源(授权);

5. 定义认证与登录的限制(本步不是必须的)。

一般来说,用户是通过配置文件或数据库来保存的,这样可以灵活的设置用户名与密码,当然也包括用户的角色。

我们以以前的数据服务为例,做一个认证管理。(本例子工作环境:win7 x64+delphi xe6+kbmmw 4.5 beta1)

首先,在主窗体放一个kbmMWAuthorizationManager1。

如图

为了方便,设置mwaoautologin. 这样在客户端直接使用客户端的用户名与密码登录。

另外kbmmwserver1 要应用这个认证管理器

同时在注册完服务器后,按上面的步骤定义资源及角色等。

  sd:= kbmMWServer1.RegisterServicebyname('xaliondatasrv',Tquerysrv ,false);editorrole:=kbmMWAuthorizationManager1.AddRole('Editor');  // 定义一个编辑角色readerrole:=kbmMWAuthorizationManager1.AddRole('Reader');  //定义一个读者角色adminrole:=kbmMWAuthorizationManager1.AddRole('Administrator'); //定义一个超级用户角色adminrole.SubRoles.Add(readerrole);  // 超级用户 具有编辑与读者的功能adminrole.SubRoles.Add(editorrole);  //  编辑与读者 是超级用户的子角色kbmMWAuthorizationManager1.AddActor('xalion','xalion','Reader');  // 定义两个用户kbmMWAuthorizationManager1.AddActor('yh','yh','Administrator'); // 这个可以通过数据库来存储readerResources:=kbmMWAuthorizationManager1.AddResource('ReaderResources'); // 定义两个资源editorResources:=kbmMWAuthorizationManager1.AddResource('EditorResources');kbmMWAuthorizationManager1.AddResource('xaliondatasrv.QUERY',readerResources); // 定义资源权限kbmMWAuthorizationManager1.AddResource('xaliondatasrv.DEFINITIONS',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.EXECUTE',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.INVENTORY',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.METADATA',readerResources);kbmMWAuthorizationManager1.AddResource('xaliondatasrv.RESOLVE',editorResources);kbmMWAuthorizationManager1.Grant('','Reader','ReaderResources',[mwapExecute]); // 给角色授权kbmMWAuthorizationManager1.Grant('','Editor','EditorResources',[mwapExecute]);

最后把数据服务设为需要认证才能访问。

{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetPrefServiceName:string;
beginResult:='xaliondatasrv';
end;{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetFlags:TkbmMWServiceFlags;
beginResult:=[mwsfListed,mwsfRunRequireAuth];
end;

服务器端就设置好了。

可以运行,并启动服务。

如果客户端没有加入认证用户名的话,查询就会出错。

表示,由于没有认证,无法访问服务器资源。

因此我们需要在客户端加入用户信息。

在查询时输入用户名及密码

procedure TForm2.Button6Click(Sender: TObject);
beginkbmMWSimpleClient1.Username:='xalion';kbmMWSimpleClient1.Password:='xalion';cx.query.Clear;cx.Query.Add('sp_tables');cx.Open;
end

现在运行客户端,就可以正常访问了

继续修改表的内容后,然后reslove, 由于前面的角色没权限,就会出认证错误

现在只能使用有编辑权限的用户了。

procedure TForm2.Button6Click(Sender: TObject);
beginkbmMWSimpleClient1.Username:='yh';kbmMWSimpleClient1.Password:='yh';cx.query.Clear;cx.Query.Add('select * from test');cx.Open;
end;procedure TForm2.Button7Click(Sender: TObject);
begincx.Resolve;showmessage('修改成功');
end;

这样就没问题了。

基本上就完成了认证管理。

如果想了解认证的过程,可以在

里面设置一下,就可以显示一下的认证过程。

GetAuthorization: Attempt authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=<all>, Role=ADMINISTRATOR, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=EDITORRESOURCES
GetAuthorization: Attempting subrole authorization for: Actor=YH , Role=ADMINISTRATOR, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=READER, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=READER, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=READER, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=<all>, Role=READER, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=EDITORRESOURCES
GetAuthorization: Unauthorized Actor=YH, Role=READER, Resource=xaliondatasrv.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=EDITOR, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=EDITOR, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=<all>, Role=<all>, Resource=XALIONDATASRV.RESOLVE
GetAuthorization: Attempt authorization for: Actor=YH , Role=EDITOR, Resource=EDITORRESOURCES
GetAuthorization: Attempt authorization for: Actor=<all>, Role=EDITOR, Resource=EDITORRESOURCES

kbmmw 还提供了自定义的登录及退出方式,大家可以根据实际情况,自己操作。

总之,有了这个认证管理器后,服务器的安全性进一步加强。

另外也可以利用这个,实现当前客户端的访问情况。

转载于:https://www.cnblogs.com/xalion/p/3738603.html

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器相关推荐

  1. 使用delphi 开发多层应用(十二)使用kbmMW webserver 返回JSON

    由于kbmMW 服务器与客户端交互是使用它的专用数据格式,因此与其它语言及平台相互访问的话就会有兼容问题, 为了最大化的利用kbmMW 服务器,从kbmMW 4.0 以后,其开始支持JSON 格式传递 ...

  2. 使用delphi 开发多层应用(十六)使用XMLRPC 实现basic4android 远程调用RTC服务

        RealThinClient (以下简称RTC) 也是一款delphi 多层开发的框架,由于其底层通讯协议是自己封装SOCK 库,抛弃了 大家诟病的indy,因此表现的非常稳定,效率也非常高, ...

  3. 使用delphi 开发多层应用(十)安全访问服务器

    前面讲了如何建立和访问服务器,但是前面建的服务器都没有安全控制,这里有很大的安全问题,第一是任何人做一个客户端都可以都可以访问 服务器.第二是数据在网络传输过程中都是明码的,没有加密,使用网络侦听器就 ...

  4. 使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库

    delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持 ...

  5. iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)

    iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...

  6. Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...

  7. Simulink代码生成(二十二)——TSP开发之创建外部设备模块

    Simulink代码生成(二十二)--TSP开发之创建外部设备模块 文章目录 Simulink代码生成(二十二)--TSP开发之创建外部设备模块 一.C Mex Sfunction文件解读 一.C M ...

  8. 转载:百为STM32开发板教程之十二——NAND FLASH

    http://bbs.21ic.com/icview-586200-1-1.html 百为STM32开发板教程之十二--NAND FLASH 参考资料: 百为stm32开发板光盘V3\百为stm32开 ...

  9. 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...

最新文章

  1. Flask | 浅读文档,快速出发
  2. EL之DTRFGBT:基于三种算法(DT、RF、GBT)对泰坦尼克号乘客数据集进行二分类(是否获救)预测并对比各自性能
  3. asprise java_使用asprise进行图片验证码识别
  4. 那些 IT 界的神翻译,原来我学不好编程的原因就在这
  5. Centos7 安装oracle数据库
  6. php登录 cookie,使用cookie进行简单的PHP登录
  7. ubuntu16.04安装天气预报软件
  8. 为什么很少人学汇编_要想精通C语言,必须先学习汇编吗
  9. [Flex]Flex3.0 Beta3下载地址
  10. curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
  11. js中进行字符串替换的方法
  12. reg型变量怎么赋值_FPGA的wire和reg类型变量
  13. 论述嵌入式linux根文件系统6,嵌入式linux根文件系统制作,大神手把手教你
  14. mysql修复主从不一致_MySQL主从不一致修复
  15. 实战:第六章:H5微信与支付宝调试错误,请回到请求来源地,重新发起请求。 错误代码 insufficient-isv-permissions
  16. 如何用计算机算p,‎App Store 上的“计算器++P”
  17. linux中命令tat,10个炫酷的Linux终端命令大全
  18. windows 7 32 出现 werfault.exe的错误处理
  19. DIB迪博数据库(2000-2018年)
  20. Tryhackme blue

热门文章

  1. 数据结构基础:树结构的学习笔记
  2. 数据结构基础:线性表学习笔记
  3. 数据库:SQLServer 实现行转列、列转行用法笔记
  4. 盘点9个你可能不会用的JS技巧
  5. Linux排序命令sort笔记
  6. CSS实现垂直居中的5种方法
  7. 计算机osta试题,OSTA试题库.doc
  8. oracle语法官方文档,Oracle官方文档必备语法知识
  9. 特征选择算法java实现_relief算法特征选择
  10. d3 制作条形图_停止制作常见的坏条形图的5个简单技巧