2016-09-03 11 views
1

Javaクライアントを使用してカスタムSAMLアサーションを生成し、SAML2ベアラアサーションプロファイルをサポートするWSO2 APIマネージャからOAuthトークンを取得しています。 (https://nallaa.wordpress.com/2013/04/04/saml2-bearer-assertion-profile-for-oauth-2-0-with-wso2-identity-server/Node.jsにSAMLアサーションを作成する方法はありますか

これは、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; 
    } 

答えて

0

この[1]は、SAMLアサーションの作成に関連して見つかった唯一のライブラリです。ライブラリのソースコードはこちら[2]にあります。その能力を探求しようとしてください。現在、SAML 1.1トークン

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

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

をサポートするように見えます
関連する問題