Shibboleth 与自定义 Web 应用程序自己的 SignOn 机制

Posted

技术标签:

【中文标题】Shibboleth 与自定义 Web 应用程序自己的 SignOn 机制【英文标题】:Shibboleth with custom web application's own SignOn mechanism 【发布时间】:2013-10-06 02:26:06 【问题描述】:

我们正在开发一个具有自己的登录机制(使用用户名和密码的登录机制)的 Web 应用程序。 SignOn 机制是使用 Web 应用程序过滤器实现的)

Web 应用程序容器是 Apache Tomcat 6.0

用户也可以选择通过 Shibboleth 身份验证登录。也就是说,要访问我们的 Web 应用程序,用户可以选择使用 Shibboleth 进行身份验证,或者使用我们自己的基于 Web 应用程序过滤器的 SignOn 机制。

同时支持 Shibboleth 身份验证和基于 Web 应用程序过滤器的登录机制在技术上是否可行?

如果可行,从 Web 应用程序过滤器端,我们如何检查用户是否已经通过 Shibboleth 的身份验证?是否有一些 Shibboleth 身份验证令牌或 Shibboleth 用户会话?

谢谢。

【问题讨论】:

你在 Tomcat 前使用 Apache 吗? 我在 Apache Tomcat 7.0.42(从 Apache Tomcat 6.0 升级)包含的 Web 应用程序前使用 Apache HTTPD 2.2 好的,您可以在您的 Apache 上使用 mod_shib_22.so 模块来集成 SP。见wiki.shibboleth.net/confluence/display/SHIB2/… 如何唯一标识 Shibboleth 认证用户?我读过关于 Shib-persistent-id 的信息。但是 request.getAttribute("Shib-persistent-id") 和 request.getHeader("Shib-persistent-id") 都返回 null。我验证了用户已通过身份验证,因为 request.getAttribute("Shib-Identity-Provider") 正确返回了我的 Shibboleth 身份提供者的 entityId。 这取决于 IdP。使用your-host/Shibboleth.sso/Session 查看您的 IdP 发送了哪些属性并选择一个独特的属性,例如“HTTP_USER” 【参考方案1】:

我假设您指的是 Shibboleth SP(服务提供者组件),并且您将需要 Shibboleth IdP(身份提供者)来提供实际的身份验证。

...是的,这是可行的,这两种方法很容易共存。

当 Shibboleth SP(使用身份提供者)成功验证用户身份时,它会将众所周知的会话属性放在 HTTP 请求属性和标头中。

可以查看访问的会话属性:

https://your-host/Shibboleth.sso/Session 

因此,在您的应用程序中,您可以检查这些属性的存在和值,例如:

request.getAttribute("NAME_OF_THE_ATTRIBUTE_IN_SESSION")
request.getHeader("NAME_OF_THE_ATTRIBUTE_IN_SESSION")

然后,使用 Shibboleth 属性,您可以执行必要的操作来允许拒绝用户身份验证。

请参阅 this 官方 wiki 以了解如何“Shibbolize”应用程序和 this 访问属性。

我建议从 this clear and comprehensive wiki 开始阅读有关 Shibboleth SP 和 IdP 安装和配置的内容。

【讨论】:

以上是关于Shibboleth 与自定义 Web 应用程序自己的 SignOn 机制的主要内容,如果未能解决你的问题,请参考以下文章

使用弹簧安全与自定义过滤器的优势?

在 MVC3 应用程序中将 Ninject 与自定义角色提供程序一起使用

Springboot的异常处理与自定义异常

zabbix3.2的使用与自定义模版

android 加速度传感器妙用与自定义View

微信小程序新单位rpx与自适应布局