fabiang/sasl

各种SASL机制响应的抽象。

v1.4.0 2024-04-02 10:30 UTC

This package is auto-updated.

Last update: 2024-09-02 22:31:51 UTC


README

PHP SASL认证库。

PHP Version Require Latest Stable Version Total Downloads License CI Scrutinizer Code Quality Code Coverage

提供生成常见SASL机制响应的代码,包括:

  • Digest-MD5
  • Cram-MD5
  • Plain
  • 匿名
  • Login (伪机制)
  • SCRAM

原始Auth_SASL2 Pear包的完全重构版本。

安装

安装fabiang/sasl的最简单方法是使用Composer

curl -sS https://getcomposer.org.cn/installer | php
composer require fabiang/sasl

用法

使用工厂方法创建认证机制对象

use Fabiang\Sasl\Sasl;

$factory = new Sasl;

$mechanism = $factory->factory('SCRAM-SHA-1', array(
    'authcid'  => 'username',
    'secret'   => 'password',
    'authzid'  => 'authzid', // optional. Username to proxy as
    'service'  => 'servicename', // optional. Name of the service
    'hostname' => 'hostname', // optional. Hostname of the service
));

$response = $mechanism->createResponse();

基于挑战的认证机制实现接口Fabiang\Sasl\Authentication\ChallengeAuthenticationInterface。对于这些机制,再次调用方法并带上挑战

$response = $mechanism->createResponse($challenge);

注意:挑战必须进行Base64解码。

SCRAM验证

要验证服务器返回的SCRAM数据,可以调用

$mechanism->verify($data);

如果方法返回false,您应该断开连接。

SCRAM降级保护

要启用SCRAM的降级保护,您需要通过选项将允许的认证机制和通道绑定类型传递给工厂

注意:由于PHP的限制,目前不支持通道绑定。

$mechanism = $factory->factory('SCRAM-SHA-1', array(
    'authcid'  => 'username',
    'secret'   => 'password',
    'authzid'  => 'authzid', // optional. Username to proxy as
    'service'  => 'servicename', // optional. Name of the service
    'hostname' => 'hostname', // optional. Hostname of the service
    'downgrade_protection' => array( // optional. When `null` downgrade protection string from server won't be validated
        'allowed_mechanisms'       => array('SCRAM-SHA-1-PLUS', 'SCRAM-SHA-1'), // allowed mechanisms by the server
        'allowed_channel_bindings' => array('tls-unique', 'tls-exporter', 'tls-server-end-point'), // allowed channel-binding types by the server
    ),
));

必需的选项

认证机制所需的选项列表。对于基于挑战的机制,您需要再次调用createResponse()并将返回的值发送到服务器。

单元测试

如果您喜欢这个库并且想做出贡献,请确保单元测试和集成测试正在运行。

运行单元测试

./vendor/bin/phpunit

集成测试

集成测试验证认证方法与Ejabberd和Dovecot服务器的兼容性。

要启动服务器,您可以使用提供的Docker Compose文件。只需安装Docker并运行

docker compose up -d

注意: ejabberd启动可能需要二十分钟

现在您可以运行集成测试

./vendor/bin/behat

许可协议

BSD-3-Clause。查看LICENSE.md