您是否在开发 Web 应用程序,需要以最先进的方式保护它们?您是否受够了创建自己的用户管理和登录页面?您是否也感觉您的实现中可能存在潜在的安全问题?在本文中,您将学习如何使用 IBM Bluemix 中的 IBM Single Sign On 服务保护 Web 应用程序。
运行应用程序
在 JazzHub 上获取代码
“ 使用 IBM Bluemix 中的 IBM Single Sign On 服务,可向任何 Web 或移动应用程序验证用户。 ”
必须在 Bluemix 中创建和配置 IBM Single Sign On 服务。这是一个一次性任务。完成此设置后,无需进一步配置即可在 Bluemix 中保护任何应用程序。
myTestSSOService
作为名称并单击 Continue 。 恭喜您!现在您可以使用 Single Sign On 服务保护在 IBM Bluemix 中运行的任何应用程序了。在本例中,仅启用了 Facebook,您还可以添加 LinkedIn 和 Google 作为身份提供商。也可以直接在 Bluemix 中的 Single Sign On 服务中维护一个自定义用户数据库。最后,可以将 Single Sign On 服务连接到世界任何地方的任何符合 SAML 的身份提供商,甚至可以在您自己的数据中心内执行此操作。
您的 Eclipse 环境需要一个插件,使其能够直接与 IBM Bluemix 进行通信。该插件还提供了用于 JEE 开发的库。
在您的 Eclipse 环境中,执行以下操作:
Bluemix
输入搜索文本字段中,按下 Enter 。 现在,您可以为 Liberty 构建一个示例 JEE Web 应用程序了。创建一个简单 servlet,用于向浏览器返回字符串 TopSecret
。在第 4 步中,我展示了如何保护这个 servlet,以便只有经过验证的用户才能访问它。
按照以下步骤创建 JEE Web 应用程序:
SSOTest
作为项目名称,单击 Finish 。 HelloWorldTest
作为类名,单击 Finish 。 doGet
方法,在收到 GET
请求时将字符串 TopSecret
返回给浏览器。 点击查看大图
关闭 [x]
您的应用程序现在已做好准备,可推送到 IBM Bluemix 了。只剩下创建 server.xml 和 web.xml 文件来添加对 Single Sign On 服务的支持了。正常情况下,只会推送 WAR 文件,但在这里,您还需要创建一个包含 server.xml 文件的特殊 ZIP 文件,以便将 Liberty 配置文件中运行的 Web 应用程序连接到 Bluemix 中的 Single Sign On 服务。
点击查看代码清单
关闭 [x]
<?xml version="1.0" encoding="ISO-8859-1" ?> <web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>HelloWorld Application</display-name> <description> This is a simple web application with a source code organization based on the recommendations of the Application Developer's Guide. </description> <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>HelloWorldTest</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> <security-constraint> <display-name> </display-name> <web-resource-collection> <web-resource-name>HelloServlet</web-resource-name> <url-pattern>/</url-pattern> <url-pattern>/*</url-pattern> <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>TESTROLE</role-name> </auth-constraint> </security-constraint> </web-app>
<server description="new server"> <featureManager> <feature>jsp-2.2</feature> <feature>localConnector-1.0</feature> </featureManager> <httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/> <applicationMonitor updateTrigger="mbean"/> <application type="war" id="SSOTest" name="SSOTest" location="SSOTest.war"> <application-bnd> <security-role name="TESTROLE"> <special-subject type="ALL_AUTHENTICATED_USERS"/> </security-role> </application-bnd> </application> </server>
现在您的应用程序包已准备好了。您已经使用预先构建的包从头创建了它。因此,您已经获得了所有必要步骤的完整概述。最后一步是将您的应用程序推送到 IBM Bluemix,并将它绑定到 Single Sign On 服务。
cf login -a https://api.ng.bluemix.net
cf push <yourNameGoesHere>
,其中 <yourNameGoesHere> 可替换为用于您的应用程序的 URL。(例如,如果将 <yourNameGoesHere> 设置为 ssotest
,那么可以在 http://ssotest.mybluemix.net 下找到您的应用程序。) cf services
来找到您的 Single Sign On 服务的名称。例如: 点击查看代码清单
关闭 [x]
cf services Getting services in org romeo.kienzler@ch.ibm.com / space developerWorks as romeo.kienzler@ch.ibm.com... OK name service plan bound apps Single Sign On-ab SingleSignOn standard ibmssoliberty
cf bind-service <yourNameGoesHere> <service_name>在我的示例中,服务的名称为 Single Sign On-ab。使用下面这个命令,我将此服务绑定到我的应用程序:
cf bind-service ibmssoliberty "Single Sign On-ab"
cf restage <yourNameGoesHere>示例:
cf restage ibmssoliberty
现在您已准备好;万事俱备。像以下这样调用您的应用程序时: http://ibmssoliberty.mybluemix.net/SSOTest/hello ,您会看到以下授权页面:
这个授权页面是 IBM Single Sign On 服务生成的,可在此服务的管理用户界面中修改它,使之符合您的风格。在验证 Facebook 凭据后,您将会看到 servlet 的输出:
在本教程中,您学习了如何快速将 Single Sign On 服务添加到 Web 应用程序中,而无需对您的源代码执行任何更改。从现在起,您可以使用此服务保护 Bluemix 中的任何应用程序。
BLUEMIX SERVICE USED IN THIS TUTORIAL: Single Sign On 服务 可以帮助您保护为云开发的 Web 和移动应用程序,并轻松地构建和增强应用程序,以包含基于策略的用户访问安全。