转载

将公司内部的单点登录扩展到 Bluemix Web 应用程序

 

许多组织越来越多地发现将其 Web 应用程序部署到 Bluemix 中既快速又轻松。但是,对于许多公司,这需要为这些由 Bluemix 承载的应用程序创建一个身份验证解决方案,以便只有公司员工和合同工能够访问。这可能被视为一项繁重的工作,需要手动更改网络配置,复制用户数据等。好消息是,有一个解决方案简化了该过程,它将您公司的 SAML 身份提供程序 (IdP) 的身份验证功能扩展到在 Bluemix 中部署和运行的 Web 应用程序。在本文中,我将介绍如何实现它。

这里介绍的用户身份验证解决方案可在 1 小时内完成,无需安装新软件,更改公司基础设施,或者将用户数据复制到 Bluemix!

在 5 个简单的步骤中,我将展示如何构建和部署一个示例 Bluemix 应用程序,配置 IBM Single Sign On (SSO) 服务来连接到您的内部 SAML IdP。您将配置示例应用程序,以便只有经过验证的用户能够访问。这可保证无论用户登录到内部 Web 应用程序还是在 Bluemix 上运行的 Web 应用程序,登录体验都是相同的。

工作原理

 

此解决方案扩展了您现有的内部 SAML IdP,并将它与 Bluemix 中可用的 SAML SSO 服务实例相集成。因此,用户在登录任何由 Bluemix 承载的 Web 应用程序时,必须连接到公司网络。

在该场景中,用户首先在浏览器中输入一个 URL 来访问一个在 Bluemix 中运行的公司 Web 应用程序,如下图所示。

将公司内部的单点登录扩展到 Bluemix Web 应用程序

浏览器仲裁 Bluemix 应用程序与 SAML IdP 之间的 SAML 重定向,消除了 Bluemix 直接访问公司内部网的需要。

需要的准备工作

 

要部署和配置本文中的示例应用程序,您将需要一个 DevOps Services 帐户。

要使您的内部 SAML IdP 能够用于 IBM SSO 服务,您将需要以下信息:

  • 用于使用您公司的内部 SAML IdP 发起登录的 URL
  • 您公司的内部 SAML IdP 的 SAML 2.0 IdP 元数据文件

您还需要从 Bluemix 下载一个 SAML 2.0 服务提供程序元数据文件。您公司的内部 SAML IdP 管理员将需要导出此元数据文件,才能配置 SAML IdP 来从 Bluemix SSO 服务接收身份验证请求。

需要的 Bluemix 和 DevOps 服务

 

以下 Bluemix 和 DevOps 服务用于部署和配置示例应用程序:

第 1 步. 在 Bluemix 中创建一个示例 Web 应用程序

 
  1. 登录到 Bluemix
  2. 在您的仪表板中,单击 CREATE AN APP
  3. 对于应用程序类型,选择 WEB将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

  4. 在下一页上,选择 Liberty for Java将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

  5. 为您的应用程序输入一个唯一名称并单击 FINISH。几分钟后,当应用程序暂存后,您就有一个在 Bluemix 上运行的 Java Web 服务器应用程序。

第 2 步. 在 Bluemix 中创建一个 SSO 服务实例

 
  1. 在您的仪表板中,单击 ADD A SERVICE OR API将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

  2. Security 下,选择 Single Sign On将公司内部的单点登录扩展到 Bluemix Web 应用程序
  3. Add Service 窗口中,在 App 字段中选择 Leave unbound。在 Service name 字段中,显示了一个名称。使用此名称或更换一个。单击 CREATE将公司内部的单点登录扩展到 Bluemix Web 应用程序
  4. Welcome 窗口中,输入前一个窗口中的服务名称并单击 Continue将公司内部的单点登录扩展到 Bluemix Web 应用程序
  5. Add New Identity Source 下,单击 SAML Enterprise将公司内部的单点登录扩展到 Bluemix Web 应用程序
  6. Configure Identity Source 窗口中,按照说明配置 SAML Enterprise Identity Source。 将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

第 3 步. 将 SSO 服务实例绑定到您的应用程序

 
  1. 打开第 1 步中创建的示例 Web 应用程序,单击 BIND A SERVICE OR API将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

  2. 从可用服务实例列表中选择第 2 步中创建的 SSO 服务实例名称。 将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

  3. 当提示 Restage Application 时,单击 RESTAGE将公司内部的单点登录扩展到 Bluemix Web 应用程序

第 4 步. 配置应用程序安全性

 

也可以使用 Eclipse Studio 或 CLI 来修改或开发应用程序代码。要了解这些方法的更多信息,打开第 1 步中创建的示例 Web 应用程序,选择 Start Coding。参阅 JazzHub 文档 了解编辑代码和构建和部署应用程序的操作说明。

以下说明通过更新 web.xml 和 ibm-application-bnd.xml 文件来将示例 Web 应用程序访问权限制到经过验证的用户。

我们将使用 IBM DevOps 修改示例应用程序的代码和配置:

  1. 在您应用程序的 Overview 页面上,单击 ADD GIT
  2. 在您项目的 WEB-INF 文件夹中,双击 web.xml将公司内部的单点登录扩展到 Bluemix Web 应用程序
  3. 将以下示例代码添加到 web.xml 文件中。web.xml 配置将对 <url-pattern> 标签中指定的应用程序 URL 的访问限制到 <auth-constraint> 标签中指定的角色。

    以下示例配置允许系统中的 “any-authenticated” 用户(指定为 <role-name>any-authenticated</role-name>)访问应用程序根 URL(指定为 <url-pattern>/*</url-pattern>)。

    您可根据需要修改应用程序的 url-patternrole-name 值。

    	  <security-constraint>
    	    <display-name>UserConstraint</display-name>
    	    <web-resource-collection>
    	      <web-resource-name>UserCollection</web-resource-name>
    	      <url-pattern>/*</url-pattern>
    	      <http-method>GET</http-method>
    	      <http-method>PUT</http-method>
    	      <http-method>HEAD</http-method>
    	      <http-method>TRACE</http-method>
    	      <http-method>POST</http-method>
    	      <http-method>DELETE</http-method>
    	      <http-method>OPTIONS</http-method>
    	    </web-resource-collection>
    	    <auth-constraint>
    	      <role-name>any-authenticated</role-name>
    	    </auth-constraint>
    	  </security-constraint>
  4. 在 META-INF 文件夹下,找到或添加(如果还不存在)一个名为 ibm-application-bnd.xml 的文件。 将公司内部的单点登录扩展到 Bluemix Web 应用程序

    以下代码使用 ibm-application-bnd.xml 文件,将 web.xml 文件中定义的角色名称 (any-authenticated) 映射到 Liberty 概要文件 subject (ALL_AUTHENTICATED_USERS)。您可根据需要将应用程序的 subject 修改为一个特定的系统用户或组。

    	<?xml version="1.0" encoding="UTF-8"?>
    	  <application-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	        xmlns="http://websphere.ibm.com/xml/ns/javaee"
    	        xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee
    	        http://websphere.ibm.com/xml/ns/javaee/ibm-application-bnd_1_0.xsd"
    	        version="1.0">
    	    <security-role name="any-authenticated">
    	      <special-subject type="ALL_AUTHENTICATED_USERS" />
    	    </security-role>
    	 </application-bnd>

    参阅 IBM 知识中心中的 Liberty 概要文件:授权 了解更多信息。

  5. 示例 Web 应用程序使用以下代码在 index.jsp 文件中读取经过验证的用户的详细信息。

    点击查看代码清单

    	<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" session="true"
    	    import="java.util.Set"
    	    import="java.security.Principal"
    	    import="javax.security.auth.Subject"
    	    import="com.ibm.websphere.security.auth.WSSubject"
    	   %>
    	   <%
    	    response.setHeader("Pragma", "no-cache");
    	    response.setHeader("Cache-control", "no-store");
    	    Subject s = WSSubject.getCallerSubject();
    	    String username="unknown";
    	    if (s != null) {
    	        Set<Principal> principals = s.getPrincipals();
    	        if (principals != null && principals.size() > 0) {
    	            // in production this should be html encoded for safety
    	            username = principals.iterator().next().getName();
    	        }
    	    }
    	   %>
    	   <html>
    	      <h3>Hello: <%=username%></h3>
    	      <p class='description'></p> Congratulations! You have successfully configured company SSO for Bluemix Web App!</span>.
    	   </html>

    备注:您可在 在 WebSphere 中以编程方式获取用户和组信息 中找到从 Subject 提取用户详细信息的示例代码。

  6. 使用 DevOps 进程构建和部署前面的更改。

第 5 步. 测试 Bluemix 应用程序的登录

 
  1. 确保您连接到公司的网络。
  2. 找到您的 Web 应用程序的 URL:
    1. 在您的 Bluemix 仪表板 中,浏览 CF APPS 下的应用程序列表。
    2. 单击您在第 2 步中创建的应用程序。这将打开应用程序概述页面,如下所示。Routes 旁边显示的 URL 是应用程序的根 URL。将公司内部的单点登录扩展到 Bluemix Web 应用程序

      点击查看大图

  3. 将 Web 应用程序 URL 键入到浏览器中,附加上 index.jsp
  4. 提示时,选择选项 Sign in with SAML Enterprise

    您已在 web.xml 文件中限制了对此页面的访问,所以绑定到此应用程序的 SSO 服务会拦截请求,并显示为此 SSO 服务实例配置的所有身份来源。

    因为 SSO 服务是为企业 SAML 身份验证配置的,所以重定向的页面将显示 Sign in with SAML Enterprise 链接。单击此链接时,您会被重定向到 SAML 登录 URL。

    将公司内部的单点登录扩展到 Bluemix Web 应用程序

    取决于您公司的内部 SAML IdP 登录页面的设计方式,此页面的外观将会不同。

  5. 输入一个有效的用户 ID 和密码。
  6. 成功登录后,Bluemix SSO 服务将显示以下屏幕。单击 AllowAllow and Remember将公司内部的单点登录扩展到 Bluemix Web 应用程序
  7. 显示的下一个页面是 index.jsp 的内容,包含登录的用户的身份。您的示例应用程序的 index.jsp 页面将类似于下图:将公司内部的单点登录扩展到 Bluemix Web 应用程序

    点击查看大图

恭喜您!您已成功地为 Bluemix 示例 Web 应用程序配置了一个 SAML IdP。

结束语

 

本文中描述的解决方案使公司能够将 Web 应用程序部署到 BLuemix,将访问限制到在公司内部 IdP 中拥有凭据的用户。验证过程要求用户在访问 Web 应用程序时能够访问公司内部网,进而提供了一个额外的安全层。可在内部 SAML IdP 级别配置和维护细粒度、特定于应用程序的身份验证策略。

此解决方案不需要将用户身份凭据复制到 Bluemix 环境。由于此原因,没有与身份存储库不同步相关的问题,而且最重要的是,用户在同一个浏览器会话中从内部部署的 Web 应用程序转移到部署到 Bluemix 的应用程序时获得了一种无缝的单点登录体验。


BLUEMIX SERVICES USED IN THIS TUTORIAL:

  • Liberty for Java 运行时 帮助您轻松地开发、部署和扩展 Java Web 应用程序。
  • Single Sign On 服务 帮助您保护为云开发的 Web 和移动应用程序,以及轻松地构建和增强应用程序以包含基于策略的用户访问安全。

    
正文到此结束
Loading...