robinpowered/php-ntlm

NTLM身份验证协议的消息编码/解码器和密码哈希器

v0.5.0 2019-04-24 17:35 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:25:56 UTC


README

Build Status Quality Score Latest Stable Version

PHP-NTLM是一个库,用于处理NTLM身份验证协议挑战-响应流程中使用的消息的编码和解码,同时提供可注入的凭证哈希机制,以允许更安全的凭证存储版本(而不是将密码以“纯文本”形式存储)。

特性

  • NTLM客户端消息编码和解码
  • 支持多种文本编码本地扩展
  • 支持LM、NTv1和NTv2哈希算法

要求

  • 64位PHP运行时(NTLM协商位标志超出32位整数大小)
  • PHP >=7.1.0

安装

  1. 获取Composer
  2. robinpowered/php-ntlm添加到您的Composer依赖项中:composer require robinpowered/php-ntlm
  3. 包含Composer自动加载器

示例用法

// Using Guzzle
$client = new Client();
$request = new Request('get', 'https://my-exchange-url.com');
$user_name = 'user_name';
$password = 'password';
$target_name = 'target_name';
$host_name = 'host_name';

$encoding_converter = new MbstringEncodingConverter();
$random_byte_generator = new NativeRandomByteGenerator();
$hasher_factory = HasherFactory::createWithDetectedSupportedAlgorithms();

$negotiate_message_encoder = new NegotiateMessageEncoder($encoding_converter);
$challenge_message_decoder = new ChallengeMessageDecoder();

$keyed_hasher_factory = KeyedHasherFactory::createWithDetectedSupportedAlgorithms();

$nt1_hasher = new NtV1Hasher($hasher_factory, $encoding_converter);
$nt2_hasher = new NtV2Hasher($nt1_hasher, $keyed_hasher_factory, $encoding_converter);

$authenticate_message_encoder = new NtlmV2AuthenticateMessageEncoder(
    $encoding_converter,
    $nt2_hasher,
    $random_byte_generator,
    $keyed_hasher_factory
);

$negotiate_message = $negotiate_message_encoder->encode(
    $target_name,
    $host_name
);

// Send negotiate message
$request->setHeader('Authorization', sprintf('NTLM %s', base64_encode($negotiate_message)));
$response = $client->send($request);

// Decode returned challenge message
$authenticate_headers = $response->getHeaderAsArray('WWW-Authenticate');
foreach ($authenticate_headers as $header_string) {
    $ntlm_matches = preg_match('/NTLM( (.*))?/', $header_string, $ntlm_header);

    if (0 < $ntlm_matches && isset($ntlm_header[2])) {
        $raw_server_challenge = base64_decode($ntlm_header[2]);
        break;
    }
}
$server_challenge = $challenge_message_decoder->decode($raw_server_challenge);

$authenticate_message = $authenticate_message_encoder->encode(
    $user_name,
    $target_name,
    $host_name,
    new Password($password),
    $server_challenge
);

// Send authenticate message
$request->setHeader('Authorization', sprintf('NTLM %s', base64_encode($authenticate_message)));
$client->send($request);

待办事项

  • LM哈希
  • NTv1哈希
  • NTv2哈希
  • NTLM协商消息编码
  • NTLM挑战消息解码
    • 消息结构和数据验证
    • 协商标志解码
    • 服务器挑战“nonce”处理
    • TargetName解析/处理
    • (可选) TargetInfo解析/处理
      • (可选) AV_PAIR解码
    • (可选) 版本解析/处理(仅用于调试目的)
  • NTLM认证消息编码
    • NTLM v1响应支持
    • NTLM v2响应支持
    • 扩展会话安全性(NTLM2会话密钥)支持
    • (附加功能) 加密会话密钥交换支持
  • 数据报(无连接)支持
  • 测试

许可

PHP-NTLM遵循Apache License, Version 2.0许可。

版权所有 2019 Robin Powered, Inc.

遵循Apache License, Version 2.0(“许可”);除非适用法律要求或经书面同意,否则不得使用此文件,除非符合许可。您可以在以下位置获取许可副本:

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或经书面同意,否则在许可下分发的软件按照“原样”基础分发,不提供任何明示或暗示的保证或条件。有关许可的具体语言规定权限和限制,请参阅许可。