rdpgw/docs/api-auth.md
jiangcuo 7ac73b9489
Some checks failed
CodeQL / Analyze (go) (push) Has been cancelled
Docker Image CI / build (push) Has been cancelled
Go / Build (push) Has been cancelled
增加服务端验证
2025-04-01 22:12:24 +08:00

2.1 KiB
Raw Blame History

NTLM认证API集成

RDPGW支持通过API集成NTLM认证允许使用您自己的用户管理系统进行认证。

API模式

API支持两种模式

  1. 验证模式verify:验证用户凭据是否有效
  2. 密码获取模式getpassword获取用户的明文密码用于NTLM挑战-响应计算

API要求

1. 验证模式

用于验证用户凭据是否有效。

请求格式

GET https://your-api-server/api/checkperm/?username=<用户名>&password=<密码>&mode=verify

成功响应

{
  "status": "success"
}

2. 密码获取模式

用于获取用户的明文密码这是NTLM认证所必需的。

请求格式

GET https://your-api-server/api/checkperm/?username=<用户名>&mode=getpassword

成功响应

{
  "status": "success",
  "password": "用户的明文密码"
}

配置

rdpgw-auth.yaml中配置API认证

apiauth:
  enabled: true
  apiurl: "https://your-api-server/api/checkperm/"

安全考虑

  1. 密码安全API必须通过HTTPS提供并且在内部网络中运行以确保安全性

  2. 密码存储您的API服务必须能够以某种形式获取或计算用户密码这需要安全的密码存储机制

  3. 替代方案如果不想暴露明文密码请考虑使用其他认证方式如OpenID Connect或基本认证

NTLM认证流程

  1. 客户端如FreeRDP发送NTLM协商消息到RDPGW
  2. RDPGW生成挑战并发送回客户端
  3. 客户端计算响应并发送认证消息
  4. RDPGW调用API以getpassword模式获取用户密码
  5. RDPGW使用获取的密码计算期望的响应并与客户端响应比较
  6. 如果匹配,认证成功;否则,认证失败

优势

  • 保持标准NTLM认证流程客户端无需修改
  • 与您的用户管理系统集成
  • 支持所有NTLM客户端包括标准Windows远程桌面客户端

注意事项

  • 您的API必须能够安全地存储和提供用户密码
  • 明文密码传输存在固有的安全风险,即使在加密通道中也是如此
  • 确保API服务器仅对RDPGW服务器可访问并考虑实施IP限制或类似措施