t-ronx/sso-bundle

Symfony2的单点登录包

安装: 341

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 3

类型:symfony-bundle

dev-master 2014-06-18 13:51 UTC

This package is not auto-updated.

Last update: 2024-09-24 07:22:09 UTC


README

我绝对不是安全专家。我对安全也不是很擅长,但我不能保证这个包的安全性。如果你想在生产中使用它,请自担风险。话虽如此,如果你想为使这个包更好/更安全做出贡献,你始终可以创建一个问题或发送一个拉取请求

描述

此包提供了一种简单的方法来将单点登录集成到您的网站中。它使用现有的(主)防火墙进行实际的身份验证,并将所有配置的单点登录路由重定向到通过一次性密码进行身份验证。

安装

使用composer安装

php composer.phar require "fm/sso-bundle" 

在内核中启用该包

// app/AppKernel.php
$bundles[] = new FM\SingleSignOnBundle\FMSingleSignOnBundle();

配置

启用sso-routes

# app/config/routing.yml:
sso:
    resource: .
    type:     sso

otp:
    # this needs to be the same as the check_path, specified later on in security.yml
    pattern: /otp/

该包依赖于现有的防火墙来提供实际的身份验证。为此,您必须配置单点登录登录路径位于该防火墙之后,并确保您需要通过该路由进行身份验证。

# app/config/config.yml:
fm_single_sign_on:
    host: mydomain.com
    login_path: /sso/
# app/config/security.yml
security:
    access_control:
        -
            host: mydomain.com
            path: ^/sso/$
            roles: [IS_AUTHENTICATED_FULLY]
# app/config/security.yml:
security:
    firewalls:
        main:
            pattern: ^/

这确保用户必须先进行身份验证(使用登录表单)。

现在对于每个防火墙(除了主防火墙),您可以使用一次性密码配置单点登录身份验证。您必须提供的只是路径和用户提供者。其他所有内容都由包处理。

# app/config/security.yml:
security:
    firewalls:
        sso:
            pattern: ^/
            fm_sso:
                provider: main
                check_path: /otp/ # path where otp will be authenticated

这就完成了!

域名限制

由于我们在这里处理多个域名,因此配置防火墙只针对特定域名工作是很明智的。比如说我们有域名A和B。域名A是进行单点登录的地方(main 防火墙),域名B由一次性密码进行身份验证(sso 防火墙)。我们可以使用一个请求匹配服务来限制防火墙只适用于特定域名。首先我们必须配置请求匹配器

# app/config/security.yml
security:
    firewalls:
        main:
            request_matcher: my.security.request_matcher.main
        sso:
            request_matcher: my.security.request_matcher.sso

现在我们可以将它们实现为服务

# src/MyAwesomeBundle/Resources/config/services.yml
services:
    my.security.request_matcher.main
        class: %security.matcher.class%
        arguments: ["/", "domain-a.com"]

    my.security.request_matcher.sso
        class: %security.matcher.class%
        arguments: ["/", "domain-b.com"]