我想从我的网站(假设它作为a.com)到供应商网站(假设它作为b.com)实施单点登录
我的供应商提供的服务将用户ID作为输入,并在响应标头中返回令牌和Cookie。我需要调用此服务并使用会话令牌通过发布请求和设置cookie(从服务响应中收到)重定向到供应商URL。
在我的代码中进行服务调用后,我将URL和令牌返回到httpservletresponse中的jsp和cookie。这个jsp中的Javascript将在页面加载时自动提交表单以进行发布调用。但是当它被重定向时,浏览器没有在请求标题中设置b.com cookie。
控制器代码:
@RequestMapping(value = "/sso", method = RequestMethod.GET)
public String ssoToVendor(final Model model, final HttpServletResponse response) {
/**
*Service call happens here and returns tok
*/
model.addAttribute("url","https:\\b.com");
model.addAttribute("tok",tok);
for (String cookie : cookies) {
response.addHeader("Set-Cookie", cookie);
}
return "dummyjsp"
}
JSP示例代码:
<body>
<form id="redirect" action="${url}" name="redirect" method="POST">
<input type="hidden" name="tok" id="tok" value="${tok}"/>
</form>
</body>
<script type="text/javascript">
var redirect = document.getElementById("redirect");
redirect.submit();
</script>
我知道不可能设置跨域cookie,但是有一些如何在c#中实现的另一个应用程序能够设置这些cookie。
我们是否可以在响应标头中设置b.com cookie,这是由浏览器创建的,并在从java中的a.com重定向时发送到b.com。