fm/sso-bundle

此包已被废弃,不再维护。未建议替代包。

Symfony2 单点登录捆绑包

安装: 689

依赖项: 0

建议者: 0

安全: 0

星标: 19

关注者: 12

分支: 4

开放问题: 8

类型:symfony-bundle

v0.1.1 2014-08-14 10:43 UTC

This package is not auto-updated.

Last update: 2017-10-04 08:13:05 UTC


README

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

描述

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

安装

使用 composer 安装

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

在内核中启用捆绑包

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

配置

启用 sso 路由

# 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 是单点登录完成的地点(主防火墙),域名 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"]