使用 SAML 进行身份验证时,如何接收与 Azure 应用程序相关的所有角色?

问题描述 投票:0回答:1

我正在尝试处理 Salesforce 中的用户配置。我们决定应该结合使用 Salesforce JIT(即时)和 Azure 预配。为了正确配置用户,我需要向 Azure 发送身份验证请求,然后 Azure 返回包含有关该用户的各种信息的有效负载。现在它正在返回角色,但只返回 1 个角色。

一个用户可以属于多个组,每个组在应用程序中具有不同的角色。我想知道,有没有办法让 Azure 在用户经过身份验证后返回用户在该应用程序中拥有的所有角色?

我尝试查找文档,但我正在努力寻找可以为我指明正确方向的东西。如果您有可以提供帮助的文档,请发送给我们。

authentication azure-active-directory salesforce provisioning
1个回答
0
投票

我解决了这个问题。长话短说,这就是 Salesforce 在 JIT Handler 类的

handleJit
方法中处理断言字符串的方式。您需要创建一个方法来解码断言并允许多值字段:

private static Map<String, List<String>> parseSAMLResponse(String encodedSamlResponse) {
        String decodedResponse = EncodingUtil.base64Decode(encodedSamlResponse).toString();
        Dom.Document doc = new Dom.Document();
        doc.load(decodedResponse);
        Map<String, List<String>> attributes = new Map<String, List<String>>();
        Dom.XMLNode assertionNode = doc.getRootElement().getChildElement('Assertion', 'urn:oasis:names:tc:SAML:2.0:assertion');
        if (assertionNode != null) {
            Dom.XMLNode attributeStatementNode = assertionNode.getChildElement('AttributeStatement', 'urn:oasis:names:tc:SAML:2.0:assertion');
            if (attributeStatementNode != null) {
                List<Dom.XMLNode> attributeNodes = attributeStatementNode.getChildElements();
                for (Dom.XMLNode attributeNode : attributeNodes) {
                    String attributeName = attributeNode.getAttribute('Name', null);
                    List<Dom.XMLNode> valueNodes = attributeNode.getChildElements();

                    List<String> values = new List<String>();

                    for (Dom.XMLNode valueNode : valueNodes) {
                        if (valueNode.getName() == 'AttributeValue') {
                            values.add(valueNode.getText());
                        }
                    }
                    if (!values.isEmpty()) {
                        attributes.put(attributeName, values);
                    }
                }
            }
        }
        return attributes;
    }

然后确保调用此方法并调整其他方法以获取地图或类似的内容,然后您可以在配置过程中处理多个角色/组:)

© www.soinside.com 2019 - 2024. All rights reserved.