Symfony应用程序提供静态Twig路由由SSO SAML 2.0门控?



我有一个静态网站,只有当用户通过SAML2 SSO进行身份验证时才能访问其页面。具体来说,这些页面是用Twig编写的,内容存储在JSON文件中,这些JSON文件作为变量提供给Twig模板。

我想知道是否有一种简单的方法来利用PHP框架,如Symfony做到这一点。理想情况下,也没有数据库层。一旦用户通过了身份验证,应该设置一些cookie,只允许他们在需要时漫游。

我的背景是Drupal,所以这就是为什么我在寻找Symfony的方向。

我确实意识到这个问题有点广泛,所以如果有一个更合适的地方来询问这个问题,那么请投票结束并为我指出正确的方向。

我已经完成了这个功能,张贴我的解决方案,在事件这是对其他人有用的线…

对于Symfony 5项目,我使用https://github.com/hslavich/OneloginSamlBundle。根据软件包的README填写config/packages/hslavich_onelogin_saml.yaml。根据您的SP和IdP的配置方式。一个专业提示,baseurl配置值应该设置为应用程序域/saml连接在一起(例如http://myapp.com/saml),有一个错误,剥离最后一个路径值(/saml/acs中的acs)和域之间的一切。

更新config/packages/security.yaml看起来像:

security:
enable_authenticator_manager: true
# https://symfony.com/doc/current/security.html#loading-the-user-the-user-provider
providers:
saml_provider:
saml:
user_class: AppSecurityUser
default_roles:
- ROLE_USER
# used to reload user from session & other features (e.g. switch_user)
app_user_provider:
id: AppSecurityUserProvider
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
app:
saml:
provider: saml_provider
# Match SAML attribute 'uid' with username.
# Uses getNameId() method by default.
username_attribute: eduPersonTargetedID
# Use the attribute's friendlyName instead of the name
check_path: saml_acs
login_path: saml_login
logout:
path: saml_logout
main:
lazy: true
provider: app_user_provider
# activate different ways to authenticate
# https://symfony.com/doc/current/security.html#the-firewall
# https://symfony.com/doc/current/security/impersonating_user.html
# switch_user: 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: ^/saml/login, roles: PUBLIC_ACCESS }
- { path: ^/saml/metadata, roles: PUBLIC_ACCESS }
- { path: ^/, roles: ROLE_USER }

最终结果是/saml/login/saml/metadata是公开可用的,而所有其他路由都需要ROLE_USER角色。通过IdP验证成功后,用户将被重定向返回并获得会话,然后可以访问站点内的所有路由。

相关内容

  • 没有找到相关文章

最新更新