如何解码 Java 中从 Azure 获取的 SAML 令牌?

How to Decode the SAML Token getting From Azure in Java?

  1. 我在 Microsoft Azure 上有一个托管的非库应用程序。
  2. 我已完成 Azure AD 中的 SAML 配置(使用 SAML 2.0 协议)
  3. 我的应用程序在 Java(运行时 7)
  4. 中运行
  5. 我正在获取 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 响应