启用 SAML SP 启动的 Web 单点登录 (SSO)

缺省情况下,WebSphere® Application Server SAML 信任关联拦截器 (TAI) 支持 IdP 启动的 SSO。定制代码就绪后,可以配置 SAML TAI 以使其支持 SP 启动的 SSO。

开始之前

此任务假设已允许系统使用 SAML Web SSO 功能。如果您尚未完成此操作,请参阅允许系统使用 SAML Web 单点登录 (SSO) 功能

关于此任务

此任务提供示例类以及配置 SP 启动的 SSO 所需完成的步骤。

过程

  1. 开发实现 com.ibm.wsspi.security.web.saml.AuthnRequestProvider 接口的 SAML 认证请求提供程序。
    getAuthnRequest(HttpServletRequest req, String errorMsg, String acsUrl, ArrayList<String> ssoUrls) 方法必须返回包含 4 个具有下列键的条目的图:
    AuthnRequestProvider.SSO_URL
    SAML 身份提供者的单点登录 URL。
    AuthnRequestProvider.RELAY_STATE
    SAML Web 浏览器单点登录概要文件定义的 relayState
    AuthnRequestProvider.REQUEST_ID
    此键的值必须与 AuthnRequest 消息中的标识属性值匹配。
    AuthnRequestProvider.AUTHN_REQUEST
    规范中定义的基本 64 位编码的 AuthnRequest 消息。代码负责生成 AuthnRequest 消息。
                    public HashMap <String, String> getAuthnRequest(HttpServletRequest req, String errorMsg, 
    			   String acsUrl, ArrayList<String> ssoUrls)
    	        throws NotImplementedException {
    	   
    	        //create map with following keys
    	        HashMap <String, String> map = new HashMap <String, String>();
    	       
    	        String ssoUrl = "https://example.com/saml20/Login";
    	        map.put(AuthnRequestProvider.SSO_URL, ssoUrl);
    
    	        String relayState = generateRandom();
    	        map.put(AuthnRequestProvider.RELAY_STATE, relayState);
    
    	        String requestId = generateRandom();
    	        map.put(AuthnRequestProvider.REQUEST_ID, requestId);
    	        
    	        //create AuthnRequest	        	        
    	        String authnMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
    				   +"<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" "
    				   +"ID=\""+requestID+"\" Version=\"2.0\" "
    				   + "IssueInstant=\"" +getUTC()+ "\" ForceAuthn=\"false\" IsPassive=\"false\""
    				   + "ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" "
    				   + "AssertionConsumerServiceURL=\"" +acs+"\" "
    				   + "Destination=\"" +destination +"\"> "
    				   + "<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
    				   + issuer
    				   +"</saml:Issuer> <samlp:NameIDPolicy"
    				   +"Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\""
    				   +"SPNameQualifier=\"mysp\""
    				   +"AllowCreate=\"true\" /> <samlp:RequestedAuthnContext Comparison=\"exact\"> "
    				   +"<saml:AuthnContextClassRef xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
    			         +"urn:oasis:names:tc:SAML:2.0:ac:classes:</samlp:RequestedAuthnContext> </samlp:AuthnRequest>";
    
    	        map.put(AuthnRequestProvider.AUTHN_REQUEST, authnMessage);
                    return map;
    	        }
  2. 将包含定制类的 jar 文件放入 (WAS_HOME)/lib/ext 目录。
  3. 配置 SAML Web SSO TAI,使其使用 AuthnRequest 消息。
    1. 登录 WebSphere Application Server 管理控制台。
    2. 单击安全性>全局安全性
    3. 展开 Web 和 SIP 安全性,然后单击信任关联
    4. 单击拦截器
    5. 单击 com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
    6. 对于定制属性,单击新建,然后填写以下定制属性信息,其中 id 是对要应用此属性的 SSO 服务提供程序 (SP) 分配的标识。
      • 名称:sso_<id>.sp.login.error.page
      • 值:定制 AuthnRequestProvider 实现类名。

指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tsec_enable_saml_sp_sso
文件名:tsec_enable_saml_sp_sso.html