nor*_*aul 8 windows delphi authentication winapi windows-authentication
我们有一个用Delphi编写的服务器,它使用RemObjects DataAbstract/SDK.我们希望使用Windows身份验证对用户进行身份验证,以允许他们访问我们的服务器.
目前我们执行以下操作:
1)客户端应用程序以明文形式将Windows用户名和密码发送到服务器.2)服务器使用以下函数检查凭据:
function ValidateUserLogonAPI(const UserName: string; const Domain: string;
const PassWord: string) : boolean;
var
Retvar: boolean;
LHandle: THandle;
begin
Retvar := LogonUser(PWideChar(UserName),
PWideChar(Domain),
PWideChar(PassWord),
LOGON32_LOGON_NETWORK,
LOGON32_PROVIDER_DEFAULT,
LHandle);
if Retvar then
CloseHandle(LHandle);
Result := Retvar;
end;
Run Code Online (Sandbox Code Playgroud)
当然,这种方法的缺点是用户凭证以明文形式通过网络传递.我们可以对它们进行加密,但加密/解密密钥必须在应用程序中提供.
我相信必须有更好的方法来实现我们的目标.我已经阅读了一些关于令牌的内容,但是并不真正理解它们在这种情况下会如何工作.
请注意,她的解决方案必须适用于Delphi Windows客户端和Delphi Prism ASP.NET客户端.
谢谢你提供的所有帮助.
小智 2
这是 DataAbstract 应该自行处理的事情,如果不能,它就是一个像 Datasnap 一样的半支持库:) 在远程处理方面,对端点进行身份验证/授权和保护数据交换非常重要。
基本上,您不必发送用户凭据,而是交换客户端和服务器都知道如何进行身份验证的“令牌”。完整的解释可能很复杂。您可以从 MSDN 开始(查找 AcceptSecurityContext() 和 InitializeSecurityContext())。一个可能的问题是 DataAbastract 是否有适当的钩子来实现身份验证阶段,这可能需要多次往返。
作为权宜之计,您可以启用 IPSec 来保护通信通道,并且不要让整个用户帐户轻易被“嗅探”。
| 归档时间: |
|
| 查看次数: |
3680 次 |
| 最近记录: |