gpt4 book ai didi

java - 使用 Java 创建 'HTTP Redirect Binding' SAML 请求

转载 作者:太空宇宙 更新时间:2023-11-04 06:28:13 27 4
gpt4 key购买 nike

我正在尝试在 Java 中为 SAML HTTP 重定向绑定(bind)实现相同的算法,如下所述:How do I correctly prepare an 'HTTP Redirect Binding' SAML Request using C#

算法相当简单:

  1. 构建 SAML 字符串
  2. 压缩该字符串
  3. 对字符串进行 Base64 编码
  4. 对字符串进行 UrlEncode。

这应该是等效的 Java 算法:

    public String encodeRedirectFormat( String samlXML ) throws IOException{
ByteArrayOutputStream os = new ByteArrayOutputStream();
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(os);
deflaterOutputStream.write( samlXML.getBytes( "UTF-8" ) );
deflaterOutputStream.close();
os.close();
String base64 = Base64.encodeBase64String( os.toByteArray() );
return URLEncoder.encode( base64, "UTF-8" );
}

我尝试编码最简单的断言:

<saml2:Assertion xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"/>

这是输出:

eJyzKU7MzTGyciwuTi0qyczPU6jIzckrtgKL2iqVFuVZ5ScWZxZb5SXmphZblSRbBTv6%2BlgZ6RlYJcK0KOnbAQCHfRi3

然后尝试使用在线工具进行解码,例如

https://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php

输出无效。有人能发现错误吗?也许 Java Deflater 的工作方式有所不同?

最佳答案

您需要为 noWrap 选项专门指示 Deflater。这是工作代码:

public String encodeRedirectFormat( String samlXML ) throws IOException{
ByteArrayOutputStream os = new ByteArrayOutputStream();
Deflater deflater = new Deflater( Deflater.DEFAULT_COMPRESSION, true );
DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(os, deflater);
deflaterOutputStream.write( samlXML.getBytes( "UTF-8" ) );
deflaterOutputStream.close();
os.close();
String base64 = Base64.encodeBase64String( os.toByteArray() );
return URLEncoder.encode( base64, "UTF-8" );
}

关于java - 使用 Java 创建 'HTTP Redirect Binding' SAML 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26484948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com