需要帮助在单独的服务器上设置 IDP 和 SP 之间的通信

问题描述 投票:0回答:1

我目前正在开展一个项目,需要在身份提供商(IDP)和服务提供商(SP)之间实施单点登录(SSO)系统。 IDP 托管在可通过互联网访问的服务器上,而 SP 也托管在具有不同 URL 的不同服务器上。

考虑到 IDP 和 SP 位于不同的服务器上,我在配置 IDP 和 SP 之间的通信时面临挑战。我已经查阅了 SSO 文档,但我仍然发现理解如何配置元数据和端点以在两方之间建立安全且成功的通信很复杂。

我正在向社区寻求以下方面的帮助:

如何配置IDP和SP的元数据,使他们能够正确识别和认证对方? 为了实现安全连接,双方需要配置哪些端点? 在不同服务器上配置 IDP 和 SP 之间的通信时,是否需要记住任何具体注意事项? 如果您有类似配置的经验,或者您拥有在不同服务器之间设置单点登录的专业知识,我将非常感谢您提供的任何建议、指导或配置示例。

非常感谢您的时间和宝贵的帮助。

致以诚挚的问候,

php symfony single-sign-on saml-2.0
1个回答
0
投票

此外,为了更好地说明我的情况,以下是我当前正在使用的详细信息和一些代码示例:

hslavich_onelogin_saml: sp: entityId: 'https://test.elium.com/login/saml2/metadata' assertionConsumerService: url: 'https://test.elium.com/login/saml2/acs' binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST' singleLogoutService: url: 'https://test.elium.com/login/saml2/sls' binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect' NameIDFormat: 'urn:oasis:names:tc:SAML:1.1:nameid-format:identifiant' idp: entityId: 'https://127.0.0.1:8000/saml/metadata' singleSignOnService: url: 'https://127.0.0.1:8000/saml/login' binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect' singleLogoutService: url: 'https://127.0.0.1:8000/saml/logout' binding: 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect' x509cert: '%kernel.project_dir%/config/saml2/idp-public-cert.pem' x509certMulti: signing: ['%kernel.project_dir%/config/saml2/idp-private-key.pem']

https://127.0.0.1:8000https://test-site.com

安全.yaml

`安全: 启用_authenticator_manager:true 密码哈希值: Symfony\Component\Security\Core\User\PasswordAuthenticatedUserInterface: 'auto'

providers:
    app_user_provider:
        entity:
            class: App\Entity\api\ApiUtilisateur
            property: username
    saml_provider:
        saml:
            user_class: App\Entity\utilisateur\Utilisateurs
            default_roles: [ 'ROLE_USER' ]

firewalls:
    app:
        pattern: ^/saml
        #            saml_provider: saml_provider
        saml:
            provider: saml_provider
            # Match SAML attribute 'uid' with username.
            # Uses getNameId() method by default.
            username_attribute: 'identifiant'
            # Use the attribute's friendlyName instead of the name
            use_attribute_friendly_name: true
            check_path: saml_acs
            login_path: saml_login
    logout:
        path: saml_logout
    login:
        pattern: ^/api/login
    #            stateless: true
    api:
        pattern: ^/(api(?!/(%app.supported_locales%)/docs)(?!/register))
        stateless: true
        provider: app_user_provider
        guard:
            authenticators:
                - App\Security\JwtAuthenticator
    dev:
        pattern: ^/(_(profiler|wdt)|css|images|js)/
        security: false
    main:
        lazy: true
        provider: app_user_provider
        form_login:
            login_path: login
        logout:
            path: app_logout
            invalidate_session: true

# Easy way to control access for large sections of your site
# Note: Only the *first* access control that matches will be used
access_control:
    - { path: ^/test, roles: ROLE_USER }
    - { path: ^/slogin, roles: ROLE_USER }
    - { path: ^/saml/login, roles: PUBLIC_ACCESS }
    - { path: ^/saml/metadata, roles: PUBLIC_ACCESS }

    - { path: ^/, role: ROLE_USER }`
© www.soinside.com 2019 - 2024. All rights reserved.