如何解码 Java 中从 Azure 获取的 SAML 令牌?
How to Decode the SAML Token getting From Azure in Java?
- 我在 Microsoft Azure 上有一个托管的非库应用程序。
- 我已完成 Azure AD 中的 SAML 配置(使用 SAML 2.0 协议)
- 我的应用程序在 Java(运行时 7)
中运行
- 我正在获取 userPrincipalName 作为编码值。
如何解码该编码值并检索实际值?
我已经使用 SAML 解析器测试了响应,它在 NameID
标记中显示了正确的值。
我期待 SAML 响应 NameID
标记中显示的值,但我得到的是编码值。
我试过下面的代码,但输出不是预期的。我期待一个电子邮件格式的字符串。
SAML 令牌在传输时采用 Base64 编码。如果您使用 java 6,只需使用以下代码解码您的 SAML 令牌:
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
public class Base64test {
public static void main(String[] args) {
String SAML_resp = "<SAML RESP>";
byte[] decoded = DatatypeConverter.parseBase64Binary(SAML_token);
try {
System.out.println(new String(decoded, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
使用 OpenSAML 2.x, it'll work with Java 1.6 . Here's an example 显示通过 OpenSAML v2 解析和验证 SAML 响应
- 我在 Microsoft Azure 上有一个托管的非库应用程序。
- 我已完成 Azure AD 中的 SAML 配置(使用 SAML 2.0 协议)
- 我的应用程序在 Java(运行时 7) 中运行
- 我正在获取 userPrincipalName 作为编码值。
如何解码该编码值并检索实际值?
我已经使用 SAML 解析器测试了响应,它在 NameID
标记中显示了正确的值。
我期待 SAML 响应 NameID
标记中显示的值,但我得到的是编码值。
我试过下面的代码,但输出不是预期的。我期待一个电子邮件格式的字符串。
SAML 令牌在传输时采用 Base64 编码。如果您使用 java 6,只需使用以下代码解码您的 SAML 令牌:
import java.io.UnsupportedEncodingException;
import javax.xml.bind.DatatypeConverter;
public class Base64test {
public static void main(String[] args) {
String SAML_resp = "<SAML RESP>";
byte[] decoded = DatatypeConverter.parseBase64Binary(SAML_token);
try {
System.out.println(new String(decoded, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
}
使用 OpenSAML 2.x, it'll work with Java 1.6 . Here's an example 显示通过 OpenSAML v2 解析和验证 SAML 响应