前面介绍的rest 服务,虽然很方便,但是存在任何人都可以访问的安全问题。
今天说一下,如何在kbmmw 中使用带验证的REST 服务?
首先我们在工程中放一个 认证控件TkbmMWAuthorizationManager。
如图:
设置kbmmwserver 的认证属性
初始化 authmgr
AuthMgr.AddRole('AdminRole');
然后设置 验证 代码
procedure Tdmf.AuthMgrLogin(Sender: TObject; const AActorName, ARoleName: string; var APassPhrase: string; var AActor: TkbmMWAuthorizationActor; var ARole: TkbmMWAuthorizationRole; var AMessage: string); begin //建议使用数据库保存用户名和密码, 密码不要用明码 if AActorName<>'xalion' then begin AMessage:='用户或密码不正确,请检查'; exit; end; if APassPhrase<>'123456' then begin AMessage:='用户或密码不正确,请检查'; exit; end; //检查角色是否定义? ARole:=AuthMgr.Roles.Get('AdminRole'); if ARole=nil then AMessage:='角色不支持' else begin //检查使用者是否存在,如果不存在则建立一个使用者 AActor:=AuthMgr.GetActor(AActorName); if AActor=nil then AActor:=AuthMgr.AddActor(AActorName,APassPhrase,ARoleName); AMessage:='用户正确,允许登录'; end; end;
在服务定义里面加上 认证 要求
[kbmMW_Method('EchoString')] // 回应输入的串 [kbmMW_Rest('method:get, path: ["echostring/{AString}","myechostring/{AString}" ]')] [kbmMW_Auth('role:[AdminRole], grant:true')] function EchoString([kbmMW_Rest('value: "{AString}"')] const AString:string):string;
运行程序
输入用户名和密码,点击登录
可以正常运行了。