aidan/simplesamlphp-module-simpletotp

此软件包的最新版本(1.0.0)没有提供许可证信息。

SimpleSAMLphp 的一个高度可配置且易于使用的基于 TOTP 的双因素认证处理模块

安装: 970

依赖项: 0

建议者: 0

安全: 0

星标: 21

关注者: 4

分支: 18

开放性问题: 4

类型:simplesamlphp-module

1.0.0 2015-09-24 22:42 UTC

This package is not auto-updated.

Last update: 2024-10-02 10:19:52 UTC


README

SimpleTOTP 是一个 SimpleSAMLphp 认证处理过滤器,它允许在身份提供者或服务提供者(或两者)上使用基于 基于时间的单次密码算法(TOTP)作为第二因素认证机制。

已在 iOS 和 Android 上与 Google Authenticator 进行了测试。

为什么?

尽管已经有几个针对 SimpleSAMLphp 的双因素认证模块存在,但它们都是作为 认证源 实现的。

作为一个认证处理过滤器,此模块在许多方面都具有灵活性

  • 对 TOTP 秘密存储位置无感知
  • 可以在选定的服务提供者或整个身份提供者上启用

使用方法

与任何其他认证处理过滤器一样,此模块需要在 config.php 或特定服务提供者或身份提供者的元数据中的 authproc 数组中进行配置。

先决条件

secret_attr 需要在属性有效负载中可用,因为它用于生成用于比较的令牌。这可以通过使用其他认证处理过滤器来实现,以查找某种外部数据库(SQL、LDAP 等)。

调用模块后,该属性将被移出用户属性数组。为了安全起见,应采取额外步骤确保删除此属性。这可以通过使用 core:AttributeAlter 过滤器或类似方法来实现。

示例

放置在 config.php 的 authproc 中或适当的元数据实体中

10 => array(
	'class' => 'simpletotp:mfa',
	'secret_attr' => 'ga_secret', //default
	'enforce_mfa' => false, //default
	'not_configured_url' => NULL,  //default
	'validation_timeout' => <int>, //default 60 (units: minutes) - optional timeout value for re-validation
),

放置在 config.php 的 authproc 中,作为最后要处理的函数之一

99 => array(
	'class' => 'core:AttributeAlter',
	'subject' => 'ga_secret',
	'pattern' => '/.*/',
	'%remove',
),

以下配置将放置在 authsource.php 中。此模块默认启用,但如果未启用,请确保在 modules/exampleauth 目录中创建一个名为 enable 的文件。

	'example-userpass' => array(
		'exampleauth:UserPass',
		'student:studentpass' => array(
			'uid' => array('test'),
			'ga_secret' => array('4HX4WBKVIJWDUV5I'),
			'eduPersonAffiliation' => array('member', 'student'),
		),
	),

使用用户名:student 密码:studentpass 登录后,您将需要 TOTP。4HX4WBKVIJWDUV5I 是一个可以由访问 /simplesaml/module.php/simpletotp/generate_token.php 生成的密钥。

每次都会生成一个随机数。您还可以使用二维码将您的 IdP 注册到 FreeOTP 或 Google Authenticator 等应用程序。

注意:为了使 TOTP 的工作,您必须确保服务器上的时钟同步。如果不一致,则永远不会生成匹配的令牌,并且认证将失败。

安装

通过 Git

在 SimpleSAMLphp 模块目录中执行简单的 git clone 即可。

通过 Composer

composer.phar require aidan/simplesamlphp-module-simpletotp

TODO

  • 改进使用文档,包括使用外部数据库作为数据源的示例
  • 添加基本的暴力破解预防