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

简介: 从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能。细化了很多权限操作。 今天对这一块做个介绍。   要做一个认证管理,大概分为以下5步:        1.  定义你要保护的资源,一般是服务、函数,当然你只要不限麻烦,可以是任何东西;        2.  定义使用者(用户);        3.  定义角色,使用者通过角色与服务器打交道;        4.  定义角色或用户可以访问的资源(授权);        5. 定义认证与登录的限制(本步不是必须的)。

  从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;
begin
     Result:='xaliondatasrv';
end;

{$IFNDEF CPP}class{$ENDIF} function Tquerysrv.GetFlags:TkbmMWServiceFlags;
begin
    
       Result:=[mwsfListed,mwsfRunRequireAuth];
end;

 

服务器端就设置好了。

可以运行,并启动服务。

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

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

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

 

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

procedure TForm2.Button6Click(Sender: TObject);
begin
   kbmMWSimpleClient1.Username:='xalion';
   kbmMWSimpleClient1.Password:='xalion';

  cx.query.Clear;
  cx.Query.Add('sp_tables');
  cx.Open;
end

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

 

 

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

 

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

 

procedure TForm2.Button6Click(Sender: TObject);
begin
   kbmMWSimpleClient1.Username:='yh';
 kbmMWSimpleClient1.Password:='yh';

  cx.query.Clear;
  cx.Query.Add('select * from test');
  cx.Open;
end;

procedure TForm2.Button7Click(Sender: TObject);
begin

   cx.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 还提供了自定义的登录及退出方式,大家可以根据实际情况,自己操作。

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

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

目录
相关文章
|
消息中间件 编解码 安全
[笔记]Windows核心编程《二十二》注入DLL和拦截API(二)
[笔记]Windows核心编程《二十二》注入DLL和拦截API(二)
154 0
|
缓存 安全 iOS开发
iOS网络编程之四——请求类NSURLRequest使用详解
iOS网络编程之四——请求类NSURLRequest使用详解
545 0
考试系统--底层框架发布时遇到的问题解决方案(Window7 IIS6.0)(三)
<p><span style="font-size:18px">     《承接上篇文章》</span></p> <p><span style="font-size:18px">       <a target="_blank" href="http://blog.csdn.net/zlts000/article/details/42151767">考试系统--底层框架发布时遇到的问题解
1265 0
|
开发框架 .NET 数据库
考试系统--底层框架发布时遇到的问题解决方案(Window7 IIS6.0)(二)
<p>        <span style="font-size:18px">《承接上篇文章》</span></p> <p><span style="font-size:18px">       <a target="_blank" href="http://blog.csdn.net/zlts000/article/details/41949991">考试系统--底层框架发布时遇到的
1305 0
考试系统--底层框架发布时遇到的问题解决方案(Window7 IIS6.0)(一)
<p>  </p> <h1>   <span style="font-size:18px">   1、 HTTP 错误 500.21 - Internal Server Error处理程序“NickLeeCallbackHandler”在其模块列表中有一个错误模块“ManagedPipelineHandler”</span> </h1> <p><span style="font-siz
1615 0