提问者:小点点

Spring安全saml和OBSSOCookie


我们公司使用Oracle权限系统SAML单点登录。我用Spring SecuritySAML库实现了Spring Security,它工作得很好,直到我最近发现了一个问题。Oracle Access System使用OBSSOCookie作为标识符,但是当saml响应返回时,我无法检索这个cookie。看看这段代码:

@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响应中检索所有信息,然后生成一个令牌,返回给前端cookie以供使用。

但是我真的很想得到OBSSOCookie,这样我就可以和其他微服务一起使用,从使用相同saml登录解决方案的其他应用程序中检索数据。

我尝试使用request. getHeaders(),但响应为空。根本没有OBSSOCookie。

任何想法如何获得OBSSOCookie从Springsaml库?

谢啦


共1个答案

匿名用户

假设在验证从IDP发送的SAML响应期间,SpringSAML可以使用cookie,您可以使用以下方法。

扩展类WebSSOProfile消费者Impl并实现方法process AdditionalData,该方法应返回OBSSOCookie的值。您可以通过作为参数提供的SAMLMessageContext访问HTTP请求及其HTTP标头/cookie。

然后,您返回的值将在SAMLCredential中的addtionalData字段下可用-该字段针对这些类型的用例进行缩进。