【问题标题】:Is there a way to create SAML assertions in Node.js有没有办法在 Node.js 中创建 SAML 断言
【发布时间】:2017-01-11 05:14:57
【问题描述】:

我正在使用 Java 客户端生成自定义 SAML 断言,以从支持 SAML2 Bearer Assertion Profile 的 WSO2 API Manager 获取 OAuth 令牌。 (https://nallaa.wordpress.com/2013/04/04/saml2-bearer-assertion-profile-for-oauth-2-0-with-wso2-identity-server/)

这是为了向没有登录 WSO2 IS 的匿名用户颁发 OAuth 令牌。我正在为这些用户生成小 ID。使用该唯一 ID,我生成 SAML 断言。

现在我想将此逻辑移至 node.js。有没有办法在 node.js 中创建类似于此逻辑的 SAML 断言?

    private Assertion buildSAMLAssertion() throws Exception {

        DefaultBootstrap.bootstrap();
        Assertion samlAssertion = new AssertionBuilder().buildObject();
        try {
            DateTime currentTime = new DateTime();
            DateTime notOnOrAfter = new DateTime(currentTime.getMillis() + 60 * 60 * 1000);
            samlAssertion.setID(createID());
            samlAssertion.setVersion(SAMLVersion.VERSION_20);
            samlAssertion.setIssuer(getIssuer());
            samlAssertion.setIssueInstant(currentTime);
            Subject subject = new SubjectBuilder().buildObject();

            NameID nameId = new NameIDBuilder().buildObject();
            nameId.setValue(username);
            nameId.setFormat(NameIdentifier.EMAIL);

            subject.setNameID(nameId);

            SubjectConfirmation subjectConfirmation =
                    new SubjectConfirmationBuilder().buildObject();
            subjectConfirmation.setMethod("urn:oasis:names:tc:SAML:2.0:cm:bearer");

            SubjectConfirmationData scData = new SubjectConfirmationDataBuilder().buildObject();
            scData.setRecipient(recipient);
            scData.setNotOnOrAfter(notOnOrAfter);
            scData.setInResponseTo(id);
            subjectConfirmation.setSubjectConfirmationData(scData);

            subject.getSubjectConfirmations().add(subjectConfirmation);

            samlAssertion.setSubject(subject);

            AuthnStatement authStmt = new AuthnStatementBuilder().buildObject();
            authStmt.setAuthnInstant(new DateTime());

            AuthnContext authContext = new AuthnContextBuilder().buildObject();
            AuthnContextClassRef authCtxClassRef = new AuthnContextClassRefBuilder().buildObject();
            authCtxClassRef.setAuthnContextClassRef(AuthnContext.PASSWORD_AUTHN_CTX);
            authContext.setAuthnContextClassRef(authCtxClassRef);
            authStmt.setAuthnContext(authContext);
            samlAssertion.getAuthnStatements().add(authStmt);

            if (claims != null) {
                samlAssertion.getAttributeStatements().add(buildAttributeStatement(claims));
            }

            AudienceRestriction audienceRestriction =
                    new AudienceRestrictionBuilder().buildObject();
            if (requestedAudiences != null) {
                for (String requestedAudience : requestedAudiences) {
                    Audience audience = new AudienceBuilder().buildObject();
                    audience.setAudienceURI(requestedAudience);
                    audienceRestriction.getAudiences().add(audience);
                }
            }
            Conditions conditions = new ConditionsBuilder().buildObject();
            conditions.setNotBefore(currentTime);
            conditions.setNotOnOrAfter(notOnOrAfter);
            conditions.getAudienceRestrictions().add(audienceRestriction);
            samlAssertion.setConditions(conditions);

            if (doAssertionSigning) {
                setSignature(samlAssertion, XMLSignature.ALGO_ID_SIGNATURE_RSA, getCredential());
            }

        } catch (Exception e) {
            e.printStackTrace();
        }

        return samlAssertion;
    }

【问题讨论】:

    标签: wso2 saml saml-2.0 wso2is wso2-am


    【解决方案1】:

    This[1] 是我能找到的唯一与构建 SAML 断言相关的库。您可以在此处找到该库的源代码 [2]。尝试探索它的能力。它目前似乎只支持 SAML 1.1 令牌

    [1]https://www.npmjs.com/package/saml

    [2]https://github.com/auth0/node-saml

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 2017-08-21
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 2015-03-30
      相关资源
      最近更新 更多