2015-11-03 5 views
0

Наша компания использует систему доступа Oracle для единого входа SAML. Я реализовал весеннюю безопасность с помощью библиотеки SAML Spring Security, она отлично работала, пока я недавно не нашел одну проблему. Oracle Access System использует OBSSOCookie в качестве идентификатора, но при ответе ответа saml ответа у меня нет способа получить этот файл cookie. Посмотрите на этот код:Весенняя безопасность saml и OBSSOCookie

@RequestMapping(value = "/callback") 
public void callback(HttpServletRequest request, HttpServletResponse response) 
     throws IOException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException { 

    Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 
    SAMLCredential credential = (SAMLCredential) authentication.getCredentials(); 
    try { 
     XMLHelper.nodeToString(SAMLUtil.marshallMessage(credential.getAuthenticationAssertion())); 
    } catch (MessageEncodingException e) { 
     e.printStackTrace(); 
    } 

    String nameID = credential.getNameID().getValue(); 
    List<Attribute> attributes = credential.getAttributes(); 
    JSONObject jso = new JSONObject(); 
    String uid; 
    String employeeType=""; 
    String company_name=""; 
    String FirstName; 
    String roles_entitled=""; 
    String LastName; 
    String primary_role=""; 


    jso.put("nameID", nameID); 
    jso.put("uid", uid); 
    jso.put("company_name", company_name); 
    jso.put("roles_entitled", roles_entitled); 
    jso.put("primary_role", primary_role); 
    jso.put("employeeType", employeeType); 
    jso.put("FirstName", FirstName); 
    jso.put("LastName", LastName); 

    String frontend_url = sideCarService.getFrontendNodeUrl(); 
    String token = KeyGenerator.createUserToken(jso, 3600 * 24 * 30); 

    String encoded = new String(Base64.encodeBase64(jso.toString().getBytes())); 
    response.sendRedirect(frontend_url + "#t/" + token + "/atts/" + encoded); 
} 

Глядя на этот код, я могу получить всю информацию от ответа SAML, а затем генерировать маркер, отдавая FRONTEND печенье для использования.

Но я действительно хочу получить OBSSOCookie, так что я могу использовать с другим микросервисом для извлечения данных из другого приложения, использующего такое же решение для входа saml.

Я попытался выполнить запрос request.getHeaders(), но ответ пуст. Нет OBSSOCookie вообще.

Любая идея получения OBSSOCookie из весенней библиотеки saml?

Благодаря

+0

Вам понадобится использовать OAM SDK для этого ... –

ответ

0

Предположив печенье доступна Spring SAML во время проверки в ответе SAML, посылаемого с IDP вы можете использовать следующий подход.

Расширить класс WebSSOProfileConsumerImpl и реализовать способ processAdditionalData, который должен возвращать значение OBSSOCookie. Вы можете получить доступ к HTTP-запросу и его HTTP-заголовкам/куки-файлам через SAMLMessageContext, который предоставляется в качестве параметра.

Возвращаемое значение будет доступно под полем additionalData в SAMLCredential - это отступом для этих видов прецедентов.

 Смежные вопросы

  • Нет связанных вопросов^_^