如何使用simpleSAMLphp和privacyIDEA设置使用OTP的单点登录

如何使用simpleSAMLphp和privacyIDEA使用OTP设置单点登录


通过simpleSAMLphp

这个howto将处理单点登录到网页。 也许你知道OpenID。 与Kerberos类似,授予“Ticket”用户使用该凭证在其他服务上进行身份验证,而不再是凭据。 在这方面,我们将使用比简单的OpenID更复杂的SAML(安全断言标记语言)。 SAML可用于设置多个实体之间的信任关系。 这就是为什么在公司和组织之间使用,为什么在线服务正在使用它。

SAML有身份提供商服务提供商 。 身份提供者(顾名思义)知道身份,并且能够验证用户的身份。 身份提供程序将验证用户凭据,发出身份验证令牌,并告知服务提供者,如果用户已经通过身份验证。 服务提供商不知道用户凭据,它甚至不知道用户列表! 服务提供商会要求身份提供者“嗨,一个叫做fred的用户,我不知道什么,想要使用我的服务,该怎么办?

因此,断言 - 数字签名的信息 - 在身份提供商和服务提供商之间传输。 这样的断言可以是请求认证,注销,也可以包含用户属性。 即身份提供者可以告知服务提供商用户的额外用户属性,谁想要使用该服务,服务提供商可以根据这些属性进行决定(授权)。 我们将在我们将要建立的例子中看到这一点。

情景

在这个例子中,我们设置了三台机器:

  • privacyidea:这是安装了privacyIDEA的OTP认证机器,用于管理一堆不同OTP设备的系统。 privacyIDEA是一个基于python的Web服务,可以运行在不同类型的Web服务器上。
  • ubuntu:这是使用simpleSAMLphp的身份提供者。 simpleSAMLphp是一个主动开发的SAML实现。 它可以作为身份提供商和服务提供商。 simpleSAMLphp是一个PHP应用程序,因此它将在任何提供Apache Web服务器和PHP的系统上运行。 为了方便使用,我们假设这台机器正在运行Ubuntu 14.04 LTS - 其他机器上的配置是类似的。
  • wordpress:这是我们的服务。 当然,您可以使用任何服务和尽可能多的不同服务(这是SSO的意义),但是为了方便使用,我选择wordpress作为我的服务。

安装privacyIDEA

我已经提供了几个Howtos来安装privacyIDEA。 在这种情况下,我建议在Ubuntu 14.04上运行privacyIDEA,如下所述 。 privacyIDEA版本1.4提供了一种更简单的方法来设置您的第一个用户连接。 它会意识到,您尚未配置任何用户,并要求您自动创建第一个用户定义。

howto还说明了如何注册或向用户分配令牌。 所以在这一点上,我们假设你有一个运行的privacyIDEA系统与用户和令牌。

安装simpleSAMLphp

在普通的Ubuntu 14.04机器上安装simpleSAMLphp就像这样容易:

apt-get install simplesamlphp php-5mcrypt

您需要一个额外的插件来验证OTP,它是在PPA资源库中提供的:

apt-get install software-properties-common
add-apt-repository ppa:privacyidea/privacyidea
apt-get update
apt-get install privacyidea-simplesamlphp

我们需要激活mcrypt模块,否则我们将收到签名错误。 运行命令:

php5enmod mcrypt

现在我们开始配置身份提供者。 你也可以看一下simplesamlphp的快速入门

启用身份提供者

在文件/etc/simplesamlphp/config.php集中

      'enable.saml20-idp'             => true,

启用认证模块

要启用privacyidea模块,您需要创建一个文件:

touch /usr/share/simplesamlphp/modules/privacyidea/enable

资源

文件/etc/simplesamlphp/authsources.php保存服务提供商验证用户的方式的定义。 身份验证方法保存在名为$ config的数组中。

所以我们在数组中添加一个如下所示的条目:

  'example-privacyidea' => array(
        'privacyidea:privacyidea',
        'privacyideaserver' => 'https://privacyidea',
        'sslverifyhost' => False,
        'sslverifypeer' => False,
        'realm' => '',
        'attributemap' => array(
                                        'username' => 'samlLoginName',
                                        'surname' => 'surName',
                                        'givenname' => 'givenName',
                                        'email' => 'emailAddress',
                                        'phone' => 'telePhone',
                                        'mobile' => 'mobilePhone',
                                        'realm' => 'memberOf',
                                        'resolver' => 'resolver'
                                        ),
    ),

privacyIDEA系统可以通过https:// privacyidea访问。 稍后我们登录到wordpress时,属性映射很有趣。

创建自签名证书

simpleSAMLphp需要一个证书才能对该断言进行签名。 跑:

openssl req -newkey rsa:2048 -new -x509 -days 3652 -nodes -out /etc/ssl/certs/simplesamlphp.crt -keyout /etc/ssl/certs/simplesamlphp.pem

注意:您可能希望将证书放在其他地方,特别是保护私钥。 您可以通过修改条目来更改文件/etc/simplesamlphp/config.php中的证书位置:

        'certdir'               => '/etc/ssl/certs/',

配置身份提供者

最后你需要告诉simpleSAMLphp,使用哪个证书,哪个应该是默认的认证模块。

您可以在文件/etc/simplesamlphp/metadata/saml20-idp-hosted.php中定义它,它应如下所示:

<?php
$metadata['__DYNAMIC:1__'] = array(
    /*
     * The hostname for this IdP. This makes it possible to run multiple
     * IdPs from the same configuration. '__DEFAULT__' means that this one
     * should be used by default.
     */
    'host' => '__DEFAULT__',

    /*
     * The private key and certificate to use when signing responses.
     * These are stored in the cert-directory.
     */
    'privatekey' => 'simplesamlphp.pem',
    'certificate' => 'simplesamlphp.crt',

    /*
     * The authentication source which should be used to authenticate the
     * user. This must match one of the entries in config/authsources.php.
     */
    'auth' => 'example-privacyidea',
);

现在需要重新启动Apache服务器:

service apache2 restart

测试身份提供者

现在您已经完成了身份提供程序,并准备测试身份验证。 转到http:// ubuntu / simplesaml的网页。


点击“验证”选项卡。


在那里,您将看到在authsources.php文件中定义的所有身份验证源。 选择“example-privacyidea”。


现在您被要求输入用户名和密码。 这些数据将被发送到privacyIDEA服务器。 密码必须包含固定的OTP PIN码和OTP设备创建的OTP值。


如果身份验证成功,您将获得以下屏幕:


身份提供者不仅会告诉我们身份验证是否成功,还会为我们提供有关用户的其他信息,例如他的电子邮件,电话号码或组(memberOf),这是privacyIDEA领域,用户我们将在以下服务提供商中使用它。

在这一点上,您有一个完全工作的SAML身份提供程序,您可以开始将全球的服务提供商添加到您自己的系统。

设置Wordpress作为服务提供商

在我们的机器wordpress我们安装Wordpress。 请参考他们的安装说明。

要将SAML认证到这个新的Wordpress安装,我们需要安装插件SAML 2.0单点登录。


设置下? 单点登录我们可以配置SAML插件。


“一般”选项卡向我们展示了还有待完成的事情。 红色警告通知您,您需要配置什么。

首先我们去标签“身份提供者”。


您可以在“IdP元数据的URL”中输入身份提供者的元数据URL,然后单击提取数据。 无论如何 - 最后你应该配置以下数据:

  • IdP名称 :ubuntu
  • URL标识符 :http://ubuntu/simplesaml/saml2/idp/metadata.php
  • 单点登录网址 :http://ubuntu/simplesaml/saml2/idp/SSOService.php
  • 单一注销URL :http://ubuntu/simplesaml/saml2/idp/SingleLogoutService.php
  • 证书指纹 :AF:80:02:D6:F2:DE:17:BA:38:87:77:3B:FE:B6:BD:97:4A:78:FA:43

指纹未自动填写。 这是您之前创建的身份提供商签名证书的指纹。 您可以在身份提供商上计算指纹,如下所示:

openssl x509 -noout -fingerprint -in /etc/ssl/certs/simplesamlphp.crt

注意:您可以将单一注销URL保留为空。 在这种情况下,从Wordpress注销不会从身份提供者登出。 如果您提供此URL,则从Wordpress注销也将从身份提供者登录,从而从其他所有服务中注销。

现在更改为“服务提供商”选项卡。


就像身份提供商签署断言服务提供商(Wordpress插件)也签署其断言。 因此,我们需要生成一个新的证书和私钥。


然后下载证书供以后使用。

在同一个选项卡上,您需要输入身份提供者返回的属性。


现在你可以分配隐私权的范围。


在这种情况下,隐私权域“defrealm”中的所有用户将被授予Wordpress中的管理员权限。 不在列表领域的用户将以订阅者身份登录。

您现在可以激活SAML插件:


在身份提供方侧配置服务提供商

作为最后一步,我们需要告知身份提供者,允许服务提供商对用户进行身份验证。 我们需要创建一个文件/etc/simplesamlphp/metadata/saml20-sp-remote.php,如下所示:

<?php
$metadata['http://wordpress/plugins/saml-20-single-sign-on/saml/www/module.php/saml/sp/metadata.php/1']  = array(
    'AssertionConsumerService' => 'http://wordpress/plugins/saml-20-single-sign-on/saml/www/module.php/saml/sp/saml2-acs.php/1',
    'SingleLogoutService'      => 'http://wordpress/plugins/saml-20-single-sign-on/saml/www/module.php/saml/sp/saml2-logout.php/1',
    'assertion.encryption' => TRUE,
    'redirect.validate' => TRUE,
    'certData' => 'MIIEEzCCAvugAwIBAgIBADANBgkqhkiG9w0BAQQFADCBozELMAkGA1UEBhMCVVMx
GjAYBgNVBAoMEVNBTUwgVGVzdGluZyBzaXRlMTMwMQYDVQQDDCpTQU1MIFRlc3Rp
bmcgc2l0ZSBTQU1MIFNpZ25pbmcgQ2VydGlmaWNhdGUxLjAsBgkqhkiG9w0BCQEW
H2Nvcm5lbGl1cy5rb2VsYmVsQG5ldGtuaWdodHMuaXQxEzARBgNVBAgMClNvbWUt
U3RhdGUwHhcNMTQxMDA2MDgxMDQyWhcNMTkxMDA1MDgxMDQyWjCBozELMAkGA1UE
BhMCVVMxGjAYBgNVBAoMEVNBTUwgVGVzdGluZyBzaXRlMTMwMQYDVQQDDCpTQU1M
IFRlc3Rpbmcgc2l0ZSBTQU1MIFNpZ25pbmcgQ2VydGlmaWNhdGUxLjAsBgkqhkiG
9w0BCQEWH2Nvcm5lbGl1cy5rb2VsYmVsQG5ldGtuaWdodHMuaXQxEzARBgNVBAgM
ClNvbWUtU3RhdGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs1wE4
EZculzCdI9eUbLBGjyzQZYmsociqyGSauwe1jcK96dNcb3uvZdF4Y0N12uGxo4Bk
Ek0WCc5uHgoIvb1Jo9kavbzlhHbM7OYf2X5usPD/gkxqzC48BtlWX6pEkxcO5eGx
bA4oFdfTGq7jxzAbfAwJzIITiS6yY7cYTeSrtzli8Fnr88iXeh8xkRfom2nlXCkZ
DkG7PQIAghgVmn6XL1SefCTXRRzlT8kZHad31NkP3Yr6N7NmNcweMbsJ3FcUvFZv
jze39B/NivNS4JW2Q6Yn++CwXlTAM6WUGMzuGNU9ICQAOOn8sLiNdiQmaFGzqulu
azgLRXegYyhehfhvAgMBAAGjUDBOMB0GA1UdDgQWBBSzFA+msOn/ynSpCej5YGYA
3dP5UDAfBgNVHSMEGDAWgBSzFA+msOn/ynSpCej5YGYA3dP5UDAMBgNVHRMEBTAD
AQH/MA0GCSqGSIb3DQEBBAUAA4IBAQCCdzmWgvMZxwOG6YyUthBhSNoq6cJ61Ni8
om+RVkWu0Hf0w7GbcKEgtxm8Ch2GSA1UJ7tUWitgzSksrE1g1PAC6FfEI2VXNaXJ
XwQ4fG0Ju/hHKF5FDRDyoMHcb9hazo5trdwnzkko7iDLR2X0oK/LyCwZpTRaWypB
xcb+QILQMVuDeiSzolRCmvFA5nCdntKsekfM0qThg7K79CHIcQ2oW5Ru6bEXjcgE
AadVeK6KTbf3gKJjO/zal+2Cwt7pjz5AyXLGnPoVj9xu1b8lq73E8rDXzOcgJLyY
QYBKYDOjunfGiOTYV06Qx27oMYQnMAMQSapDCsMDEXAe4AcxXj74'
);

certData是您从Wordpress下载的证书, 包括BEGIN CERTIFICATE和END CERTIFICATE。

登录

当您现在尝试通过http://wordpress/wp-login.php登录到您的Wordpress安装时,您将被重定向到Identity Provider登录页面...


...您输入的信息由privacyidea服务器验证,并且您已登录。实际上,您处于登录状态,以便您可以使用与您的simpleSAMLphp身份提供程序配置的任何其他服务提供商。

玩得开心,认真!

只有一次!

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏