使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
从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 的认证管理器相关推荐
- 使用delphi 开发多层应用(十二)使用kbmMW webserver 返回JSON
由于kbmMW 服务器与客户端交互是使用它的专用数据格式,因此与其它语言及平台相互访问的话就会有兼容问题, 为了最大化的利用kbmMW 服务器,从kbmMW 4.0 以后,其开始支持JSON 格式传递 ...
- 使用delphi 开发多层应用(十六)使用XMLRPC 实现basic4android 远程调用RTC服务
RealThinClient (以下简称RTC) 也是一款delphi 多层开发的框架,由于其底层通讯协议是自己封装SOCK 库,抛弃了 大家诟病的indy,因此表现的非常稳定,效率也非常高, ...
- 使用delphi 开发多层应用(十)安全访问服务器
前面讲了如何建立和访问服务器,但是前面建的服务器都没有安全控制,这里有很大的安全问题,第一是任何人做一个客户端都可以都可以访问 服务器.第二是数据在网络传输过程中都是明码的,没有加密,使用网络侦听器就 ...
- 使用delphi 开发多层应用(二十一)使用XE5 RESTClient 直接访问kbmmw 数据库
delphi XE5 出来了,增加了android 的开发支持,另外增加了一个RESTClient 来支持访问REST 服务器. 这个功能非常强大,可以直接使用非常多的REST 服务器.同时也可以支持 ...
- iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2)
iOS 11开发教程(二十二)iOS11应用视图实现按钮的响应(2) 此时,当用户轻拍按钮后,一个叫tapButton()的方法就会被触发. 注意:以上这一种方式是动作声明和关联一起进行的,还有一种先 ...
- Android开发笔记(一百二十二)循环器视图RecyclerView
RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...
- Simulink代码生成(二十二)——TSP开发之创建外部设备模块
Simulink代码生成(二十二)--TSP开发之创建外部设备模块 文章目录 Simulink代码生成(二十二)--TSP开发之创建外部设备模块 一.C Mex Sfunction文件解读 一.C M ...
- 转载:百为STM32开发板教程之十二——NAND FLASH
http://bbs.21ic.com/icview-586200-1-1.html 百为STM32开发板教程之十二--NAND FLASH 参考资料: 百为stm32开发板光盘V3\百为stm32开 ...
- 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...
最新文章
- Flask | 浅读文档,快速出发
- EL之DTRFGBT:基于三种算法(DT、RF、GBT)对泰坦尼克号乘客数据集进行二分类(是否获救)预测并对比各自性能
- asprise java_使用asprise进行图片验证码识别
- 那些 IT 界的神翻译,原来我学不好编程的原因就在这
- Centos7 安装oracle数据库
- php登录 cookie,使用cookie进行简单的PHP登录
- ubuntu16.04安装天气预报软件
- 为什么很少人学汇编_要想精通C语言,必须先学习汇编吗
- [Flex]Flex3.0 Beta3下载地址
- curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
- js中进行字符串替换的方法
- reg型变量怎么赋值_FPGA的wire和reg类型变量
- 论述嵌入式linux根文件系统6,嵌入式linux根文件系统制作,大神手把手教你
- mysql修复主从不一致_MySQL主从不一致修复
- 实战:第六章:H5微信与支付宝调试错误,请回到请求来源地,重新发起请求。 错误代码 insufficient-isv-permissions
- 如何用计算机算p,App Store 上的“计算器++P”
- linux中命令tat,10个炫酷的Linux终端命令大全
- windows 7 32 出现 werfault.exe的错误处理
- DIB迪博数据库(2000-2018年)
- Tryhackme blue