{"_id":"@sigmacomputing/saml2-js","_rev":"731-bac80d3d4abc600d80ba2b6b2a3191eb","name":"@sigmacomputing/saml2-js","dist-tags":{"latest":"2.0.8"},"versions":{"2.0.7":{"name":"@sigmacomputing/saml2-js","version":"2.0.7","keywords":["saml","node"],"author":{"name":"Clever"},"_id":"@sigmacomputing/saml2-js@2.0.7","maintainers":[{"name":"anandnarayanan","email":"anand@sigmacomputing.com"},{"name":"neil-sigma","email":"neil.lugovoy@sigmacomputing.com"},{"name":"pawin-sigma","email":"pawin@sigmacomputing.com"},{"name":"jeff-sigmacomputing","email":"jeffrey.sarnat@sigmacomputing.com"},{"name":"ericbannatyne-sigma","email":"eric@sigmacomputing.com"},{"name":"dbronnik","email":"dmitri@sigmacomputing.com"},{"name":"markwongsk","email":"markwongsk@gmail.com"},{"name":"quynhdn","email":"quynh@sigmacomputing.com"},{"name":"duci9y","email":"deepanshu@sigmacomputing.com"},{"name":"madhav-sigma","email":"madhav@sigmacomputing.com"},{"name":"jack-bens","email":"jbens.sf@gmail.com"},{"name":"benjixd","email":"benjamin.zhao@sigmacomputing.com"},{"name":"adityasigmacomputing","email":"aditya@sigmacomputing.com"},{"name":"alexisjohnson","email":"alexis@sigmacomputing.com"},{"name":"wtgjxj","email":"jxj@pobox.com"},{"name":"anton-bulyenov","email":"anton@sigmacomputing.com"},{"name":"ships","email":"eve@sigmacomputing.com"},{"name":"turese","email":"turese@sigmacomputing.com"},{"name":"greg-at-sigma","email":"greg@sigmacomputing.com"},{"name":"lathasigma","email":"latha@sigmacomputing.com"},{"name":"bwiklund","email":"ben@daisyowl.com"},{"name":"jmhain","email":"joey@sigmacomputing.com"},{"name":"mdsib","email":"Mdsiboldi@gmail.com"},{"name":"rwoollen","email":"rwoollen@sigmacomputing.io"},{"name":"jlgale","email":"jlgale@gmail.com"},{"name":"jfranty","email":"jasondfrantz@gmail.com"},{"name":"sigmaci","email":"rwoollen@sigmacomputing.io"},{"name":"ktruong","email":"kenneth.e.truong@gmail.com"},{"name":"donhcd","email":"don.hcd@gmail.com"},{"name":"maxseiden","email":"140dbs@gmail.com"},{"name":"dianajohnson13","email":"dianajohnson13@gmail.com"}],"homepage":"https://github.com/Clever/saml2#readme","bugs":{"url":"https://github.com/Clever/saml2/issues"},"dist":{"shasum":"a1bc0cb0146ab25c7a51919010e47c28f5bf1441","tarball":"https://registry.npmjs.org/@sigmacomputing/saml2-js/-/saml2-js-2.0.7.tgz","fileCount":48,"integrity":"sha512-PmjTh5m/snhhyWebPS9EgnTdHbS9iC6r/x0u9go0xlYhBcNkLk14wKI17t6BqP1rpEyHGqew6sfMuK/rLn03Lg==","signatures":[{"sig":"MEQCIDa9UetIQ5TbF5onlaZul2rsrtim4orkC7n/zBb0V4V9AiAb+74mNWTx4WdRXc/bcLvI6IrPjRKiVYtRBRpuo136+g==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":232399,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfnMkGCRA9TVsSAnZWagAA7JkP/3wPu2w8jGgeda8LlbE8\nxRPMbZigo+rt7aHTAfzv4z1f9lwFLrOAVtVv02hRMhOt8qU0iU2+Qp8TWvJT\ndHeJ4zyJG6WFBOCSeS2kFQFL4YLADf9yyvWCWO57DrrIhscaetKi9bUSRqik\nPz3uPN7Bglh9VkpwoTbUuFK85RHiw+IRsPSG6qu5cfR6csOd+ZjRBrd6AiF4\nJgdJTgxhfglsN82dkrwi2l8D0peJyf1aP4ct81D0x/cGvpgEOsfUe9weeWP2\nlSFsT7Rmq5ikWIf/fZiMKKuT6uGHl7M3e6pnbIJUQqXzx1hhAX6fZmTRbBHw\nCyBgR0NYN8hrMu9GnmGH9MKYPcog77TwjcezFrd6jRZvW9BxrVY8qotPCZ87\n2UNIzi/KKrltz4lFn28meXzRqnA+ZzOOXUYPYcIJUrPomnxHn4GHRwvrsW8x\nGg/6tWrprhIUe8HqUr/gZXxxDnIrLI38Kh+i/ErWTgPh9P9cXTvCl5bsho1f\nCsvA3dgubOTXi+ZDpXW2VAUtr797Xar+YanI0YgLTaB77HoPllowI4FslxOc\n1O+NtaRCwtTCPzpmSxoS6HqBBoKchWfres0hmJmzSqupbQNZ3nalQPmx0HSx\n1+r7QTTH9miGquyIYIiYDVJ8MbHHam8zi8HQdTP/M5YNWt5fxtosROnrvqdA\nw7Cu\r\n=x6Dk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">=0.10.x"},"gitHead":"3220005aa064863ce707c2967dbb70badb4aae51","scripts":{"test":"make -Br test","test-cov":"make -Br test-cov","prepublish":"make build"},"_npmUser":{"name":"donhcd","email":"don.hcd@gmail.com"},"repository":{"url":"git://github.com/Clever/saml2.git","type":"git"},"_npmVersion":"6.13.4","description":"SAML 2.0 node helpers","directories":{},"_nodeVersion":"12.16.0","dependencies":{"async":"^2.5.0","debug":"^2.6.0","xml2js":"^0.4.0","xmldom":"^0.1.0","underscore":"^1.8.0","xml-crypto":"^2.0.0","xmlbuilder":"~2.2.0","xml-encryption":"^1.2.1"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^3.5.0","coffee-script":"^1.12.0"},"_npmOperationalInternal":{"tmp":"tmp/saml2-js_2.0.7_1604110598137_0.042224514819691805","host":"s3://npm-registry-packages"}},"2.0.8":{"name":"@sigmacomputing/saml2-js","version":"2.0.8","keywords":["saml","node"],"author":{"name":"Clever"},"_id":"@sigmacomputing/saml2-js@2.0.8","maintainers":[{"name":"danielroberts","email":"droberts@hey.com"},{"name":"anandnarayanan","email":"anand@sigmacomputing.com"},{"name":"neil-sigma","email":"neil.lugovoy@sigmacomputing.com"},{"name":"pawin-sigma","email":"pawin@sigmacomputing.com"},{"name":"jeff-sigmacomputing","email":"jeffrey.sarnat@sigmacomputing.com"},{"name":"ericbannatyne-sigma","email":"eric@sigmacomputing.com"},{"name":"dbronnik","email":"dmitri@sigmacomputing.com"},{"name":"markwongsk","email":"markwongsk@gmail.com"},{"name":"quynhdn","email":"quynh@sigmacomputing.com"},{"name":"duci9y","email":"deepanshu@sigmacomputing.com"},{"name":"madhav-sigma","email":"madhav@sigmacomputing.com"},{"name":"jack-bens","email":"jbens.sf@gmail.com"},{"name":"benjixd","email":"benjamin.zhao@sigmacomputing.com"},{"name":"adityasigmacomputing","email":"aditya@sigmacomputing.com"},{"name":"alexisjohnson","email":"alexis@sigmacomputing.com"},{"name":"wtgjxj","email":"jxj@pobox.com"},{"name":"anton-bulyenov","email":"anton@sigmacomputing.com"},{"name":"ships","email":"eve@sigmacomputing.com"},{"name":"turese","email":"turese@sigmacomputing.com"},{"name":"greg-at-sigma","email":"greg@sigmacomputing.com"},{"name":"lathasigma","email":"latha@sigmacomputing.com"},{"name":"bwiklund","email":"ben@daisyowl.com"},{"name":"jmhain","email":"joey@sigmacomputing.com"},{"name":"mdsib","email":"Mdsiboldi@gmail.com"},{"name":"rwoollen","email":"rwoollen@sigmacomputing.io"},{"name":"jlgale","email":"jlgale@gmail.com"},{"name":"jfranty","email":"jasondfrantz@gmail.com"},{"name":"sigmaci","email":"rwoollen@sigmacomputing.io"},{"name":"ktruong","email":"kenneth.e.truong@gmail.com"},{"name":"donhcd","email":"don.hcd@gmail.com"},{"name":"maxseiden","email":"140dbs@gmail.com"},{"name":"dianajohnson13","email":"dianajohnson13@gmail.com"}],"homepage":"https://github.com/Clever/saml2#readme","bugs":{"url":"https://github.com/Clever/saml2/issues"},"dist":{"shasum":"b6facf90f39eb9ee319f042893cb1ac380307c86","tarball":"https://registry.npmjs.org/@sigmacomputing/saml2-js/-/saml2-js-2.0.8.tgz","fileCount":50,"integrity":"sha512-zXN6egOQ10TogaMcZMrVBKMUqkjqdWTCgR2TRxH9JPHTgxzw6QvyTH5M4bRdcn+kAwWCvBFI1FOu+3auZIG9yQ==","signatures":[{"sig":"MEUCIQC6TRiLq8wx/ky3MkVL3pgv2tJctuFHu1eyUKyElmd+uwIgNNKEOLQcFmlBkxIJXkOg5oPExDXjre0N9Sv9/Chdk6A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":235063,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfoQrsCRA9TVsSAnZWagAAPjIP/jzvTQc7AsfNJYvS6EjB\n0l8vviVByncrVfH/9VrKeGNar0MlnAljYTr7DwxVXnZYmOkI5APlFwyWYCSb\nExM5QfGYRO3wd1fe5iIhOPB3RBlFl1+j8TrMdaP1sx8VRVzlRbnSGVYKPXNI\nqO/8n9WltFr9OJlmopkkM36/F2CzDXF48g9lipbSYRVZcTyApMvH4Tvcbg6T\nE+1XNMU8wKJO0GljbrkUQPj7iRSNQurJls3io8S71m2Gom/z89tL+ktX/ioM\netSRDBNTd7RpA5tBk/tJrlRMe4qU9d0JA+vC10KoITB6cKDVtGe5VrmMzqKl\nwHfpK/X7C+8dox8KcHjrv5OLbDNGpsBphHmjxcvkWDcMfSNAIwCRxZudO+O2\nphT10qD3CRzDZzGF41iBW1xzch4kJaGBOoiBdh3KxCQIbUErkne4+5GYKAZh\nAruvrq1VBFA84Csd7QyiSB5QyiEY9h4npNhfGmE+VWqebZwf7F6paO5g6J5L\nbBUuRr8zxDkI2oGQHbp+wPgnkUFN2H8ylYHYUZ3VKGxDiUD173x/2Iansxv2\n0SpyDHBSfBQ6f3orCOKoorUlLM2KL/o+kbOxB6jr1SFROFQ/yVAd46TyvAAK\nkSDeaoVGy3gRFEozVbSoASWkvtdtnfc6wwl2HZcD19tSmACxisJtNPWaRbsk\nlub7\r\n=YOzZ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","engines":{"node":">=0.10.x"},"gitHead":"fcfce36905dff3d46ef75441a771a7b145f70693","scripts":{"test":"make -Br test","test-cov":"make -Br test-cov","prepublish":"make build"},"_npmUser":{"name":"donhcd","email":"don.hcd@gmail.com"},"repository":{"url":"git://github.com/Clever/saml2.git","type":"git"},"_npmVersion":"6.13.4","description":"SAML 2.0 node helpers","directories":{},"_nodeVersion":"12.16.0","dependencies":{"async":"^2.5.0","debug":"^2.6.0","xml2js":"^0.4.0","xmldom":"^0.1.0","underscore":"^1.8.0","xml-crypto":"^2.0.0","xmlbuilder":"~2.2.0","xml-encryption":"^1.2.1"},"_hasShrinkwrap":false,"devDependencies":{"mocha":"^3.5.0","coffee-script":"^1.12.0"},"_npmOperationalInternal":{"tmp":"tmp/saml2-js_2.0.8_1604389611786_0.9707109279713988","host":"s3://npm-registry-packages"}}},"time":{"created":"2020-10-31T02:16:38.136Z","modified":"2026-09-22T18:18:03.958Z","2.0.7":"2020-10-31T02:16:38.279Z","2.0.8":"2020-11-03T07:46:51.955Z"},"bugs":{"url":"https://github.com/Clever/saml2/issues"},"author":{"name":"Clever"},"homepage":"https://github.com/Clever/saml2#readme","keywords":["saml","node"],"repository":{"url":"git://github.com/Clever/saml2.git","type":"git"},"description":"SAML 2.0 node helpers","maintainers":[{"email":"jasondfrantz@gmail.com","name":"jfranty"},{"email":"kenneth@sigmacomputing.com","name":"ktruong"},{"email":"140dbs@gmail.com","name":"maxseiden"},{"email":"josherichchen@gmail.com","name":"josherich"},{"email":"nathan.healey@sigmacomputing.com","name":"sigma-nathan-healey"},{"email":"casey.jimenez@sigmacomputing.com","name":"caseyjsigma"},{"email":"pat.haimbaugh@sigmacomputing.com","name":"pat-haimbaugh"},{"email":"madelyn@sigmacomputing.com","name":"dmadelyn"},{"email":"siva+npm@sigmacomputing.com","name":"sivadheeraj2"},{"email":"kevin.pham@sigmacomputing.com","name":"kevinpham"},{"email":"pearce@sigmacomputing.com","name":"pearce-sigma"},{"email":"joey@sigmacomputing.com","name":"jmhain"},{"email":"phil@sigmacomputing.com","name":"pballai"},{"email":"dinkar@sigmacomputing.com","name":"dinkarkhattar"},{"email":"ash@sigmacomputing.com","name":"azule-lux"},{"email":"jxj@pobox.com","name":"wtgjxj"},{"email":"nathan@sigmacomputing.com","name":"nathansigma"},{"email":"hiranmayagundu@gmail.com","name":"hiranmaya"},{"email":"benjamin.zhao@sigmacomputing.com","name":"benjixd"},{"email":"yuhang@sigmacomputing.com","name":"yuhangsigma"},{"email":"support_dbronnik@npmjs.com","name":"dbronnik"},{"email":"anand@sigmacomputing.com","name":"anandnarayanan"},{"email":"eran@sigmacomputing.com","name":"eranatsigma"},{"email":"eric.zimanyi@sigmacomputing.com","name":"ezimanyi-sigma"},{"email":"jay@sigmacomputing.com","name":"jhu_sigma"},{"email":"roger@sigmacomputing.com","name":"rjsigma"},{"email":"kiel@sigmacomputing.com","name":"kiel2"},{"email":"rwoollen@sigmacomputing.io","name":"rwoollen"},{"email":"anjin@sigmacomputing.com","name":"anjinl"},{"email":"mansa@sigmacomputing.com","name":"mansa_pabbaraju"},{"email":"huy@sigmacomputing.com","name":"huy-sigma"},{"email":"priyanshi@sigmacomputing.com","name":"priyanshi13"},{"email":"brett@sigmacomputing.com","name":"brett_b_at_sigma"},{"email":"nicholas@sigmacomputing.com","name":"nicholaschandler"},{"email":"diego@sigmacomputing.com","name":"diego-sigma"},{"email":"rudy@sigmacomputing.com","name":"rudysigma"},{"email":"sharvil@sigmacomputing.com","name":"sharviln"},{"email":"sinan@sigmacomputing.com","name":"sinanunan"},{"email":"abhijit@sigmacomputing.com","name":"abhijit_sigma"},{"email":"rounak@sigmacomputing.com","name":"rounaksalim95"},{"email":"robin@sigmacomputing.com","name":"robinpille"},{"email":"nikhil.aggarwal@sigmacomputing.com","name":"nikhil_0929"},{"email":"rick@sigmacomputing.com","name":"reitmr"},{"email":"asad@sigmacomputing.com","name":"asadakram"},{"email":"hao@sigmacomputing.com","name":"haoxu-sigma"},{"email":"bohan@sigmacomputing.com","name":"bohan_sigma"},{"email":"abhinav@sigmacomputing.com","name":"ajvedati"},{"email":"mat@sigmacomputing.com","name":"mathughes"},{"email":"srivatsa@sigmacomputing.com","name":"srivatsa-p"},{"email":"jade@sigmacomputing.com","name":"jadefleishhacker"},{"email":"peter@sigmacomputing.com","name":"peternandersson"},{"email":"purvil@sigmacomputing.com","name":"purvilmehta"},{"email":"ryan.kwong@sigmacomputing.com","name":"ryankwong"},{"email":"colin@sigmacomputing.com","name":"cgreybosh"},{"email":"stephen.hiller@sigmacomputing.com","name":"shiller8586"},{"email":"valerie@sigmacomputing.com","name":"valerie-fauconmorin"},{"email":"zhen@sigmacomputing.com","name":"liz425"},{"email":"aileen@sigmacomputing.com","name":"aileensigma"},{"email":"matei@sigmacomputing.com","name":"matei_the_sigmanaut"},{"email":"ashton@sigmacomputing.com","name":"ashtonca"},{"email":"matt.bierman@sigmacomputing.com","name":"matt-bierman-sigma"},{"email":"estella@sigmacomputing.com","name":"estellakarunia"},{"email":"jason.scherer@sigmacomputing.com","name":"jscherererer"},{"email":"jisha@sigmacomputing.com","name":"jishakambo"},{"email":"oliver@sigmacomputing.com","name":"olcawthorne"},{"email":"sarah.moir@sigmacomputing.com","name":"smoir"},{"email":"colin.dolese@sigmacomputing.com","name":"colindolese"},{"email":"kulachi@sigmacomputing.com","name":"kulachi"},{"email":"ashna@sigmacomputing.com","name":"ashnarya"},{"email":"angela@sigmacomputing.com","name":"angelafan"},{"email":"bhavana@sigmacomputing.com","name":"bhavanapkote"},{"email":"nicolas@sigmacomputing.com","name":"montefern"},{"email":"svc-prd-cursor-npm@sigmacomputing.com","name":"svc-prd-cursor-npm"},{"email":"mukund@sigmacomputing.com","name":"mukund-sigma"},{"email":"curtis@sigmacomputing.com","name":"curtiscastro"},{"email":"oscar.bashaw@sigmacomputing.com","name":"obashaw"},{"email":"sweta.vooda@sigmacomputing.com","name":"swvooda"},{"email":"svc-prd-socket-npm@sigmacomputing.com","name":"svc-prd-socket-npm"},{"email":"don@sigmacomputing.com","name":"don-sigma"},{"email":"sarah.brovman@sigmacomputing.com","name":"sbrovman"},{"email":"varun@sigmacomputing.com","name":"voidd7"},{"email":"justine.yuan@sigmacomputing.com","name":"justineyuan"},{"email":"andrew.holmes@sigmacomputing.com","name":"acholmes"},{"email":"matt.jones@sigmacomputing.com","name":"mjones-sigma"},{"email":"john.yorke@sigmacomputing.com","name":"john.yorke"},{"email":"lilei@sigmacomputing.com","name":"lilei-sigma"},{"email":"samantha.cibelli@sigmacomputing.com","name":"scibellisigma"},{"email":"brian.hildebrand@sigmacomputing.com","name":"hildebr4nd"},{"email":"garrett.mack@sigmacomputing.com","name":"sgarrettmack"},{"email":"ben.sgro@sigmacomputing.com","name":"mrsk"},{"email":"donald@sigmacomputing.com","name":"dweidner-sigma"},{"email":"arman@sigmacomputing.com","name":"sigma-catfish"},{"email":"vivek@sigmacomputing.com","name":"vivek7"},{"email":"alice.tan@sigmacomputing.com","name":"alice.tan"},{"email":"alicia@sigmacomputing.com","name":"aicluo"},{"email":"tana@sigmacomputing.com","name":"tana-sigma"},{"email":"ganesh@sigmacomputing.com","name":"ganesh24"},{"email":"jordan.stein@sigmacomputing.com","name":"jstein77"},{"email":"daphne@sigmacomputing.com","name":"dapwu"},{"email":"maximus@sigmacomputing.com","name":"maximus-sigma"},{"email":"angel@sigmacomputing.com","name":"angel-sigma"},{"email":"angela-npm@sigmacomputing.com","name":"angelafan1"},{"email":"sathwik@sigmacomputing.com","name":"sathwik92ranabothu"},{"email":"sepehr@sigmacomputing.com","name":"sigmaseppy"},{"email":"wenxuan@sigmacomputing.com","name":"wenxuan5"},{"email":"andy.leo@sigmacomputing.com","name":"andyleo"},{"email":"kabilan@sigmacomputing.com","name":"kabilan-sigma"},{"email":"kunal@sigmacomputing.com","name":"kunalgadgil"},{"email":"peter.bidoshi@sigmacomputing.com","name":"peterb.sigma"},{"email":"max.morrison@sigmacomputing.com","name":"maxzmorrison"},{"email":"eesha@sigmacomputing.com","name":"eeshakurode"},{"email":"dmitri@sigmacomputing.com","name":"dbronnik2"},{"email":"jessica.li@sigmacomputing.com","name":"jessicazli"},{"email":"ronak@sigmacomputing.com","name":"ronaksigma"},{"email":"justin.wang@sigmacomputing.com","name":"jw11142002"},{"email":"danika@sigmacomputing.com","name":"danikaland"},{"email":"kevin.yu@sigmacomputing.com","name":"ky28060"},{"email":"asen@sigmacomputing.com","name":"ako28"},{"email":"fara@sigmacomputing.com","name":"faradora"},{"email":"daniel.li@sigmacomputing.com","name":"chengming.li"},{"email":"tejas@sigmacomputing.com","name":"tejas-sigma"},{"email":"matt.senick@sigmacomputing.com","name":"matt.senick"},{"email":"jarvis@sigmacomputing.com","name":"jarvis-sigma"},{"email":"zhou@sigmacomputing.com","name":"zhong-sigma"},{"email":"wren@sigmacomputing.com","name":"wren.warburg"},{"email":"illia@sigmacomputing.com","name":"illia_lazurenko"},{"email":"jake.hannan@sigmacomputing.com","name":"jhannan13"},{"email":"haechan@sigmacomputing.com","name":"haechanoh"},{"email":"ray.chen+1@sigmacomputing.com","name":"ray.chen.sigma.2"},{"email":"blake.skinner.npm@sigmacomputing.com","name":"blake.skinner.npm"},{"email":"margot.merrill@sigmacomputing.com","name":"margotmerrill"},{"email":"kirtan@sigmacomputing.com","name":"kirtan22"},{"email":"svc-prd-yarn-npm@sigmacomputing.com","name":"svc-prd-yarn-npm"},{"email":"robert.bae@sigmacomputing.com","name":"robertbae-sigma"},{"email":"Joseph.gozonnpm@sigmacomputing.com","name":"josephgoznpm"},{"email":"samira@sigmacomputing.com","name":"samirapatel"},{"email":"joshua.bowman@sigmacomputing.com","name":"joshb-sigma"},{"email":"neil@sigmacomputing.com","name":"neiloliver"},{"email":"lyle@sigmacomputing.com","name":"lylesigam"},{"email":"matt.cowger@sigmacomputing.com","name":"mcowger-at-sigma"},{"email":"colin.parker@sigmacomputing.com","name":"colinmparker"},{"email":"sean.king@sigmacomputing.com","name":"seanking-sigma"},{"email":"william.olsen@sigmacomputing.com","name":"williamdolsen"},{"email":"marwan@sigmacomputing.com","name":"marwanmattar"},{"email":"emma@sigmacomputing.com","name":"eltong11"},{"email":"douglas@sigmacomputing.com","name":"dougancey"},{"email":"ben.harris@sigmacomputing.com","name":"benharrissigma"},{"email":"mikhail@sigmacomputing.com","name":"mhogrefe"},{"email":"george.bonvanie@sigmacomputing.com","name":"georgebonvaniesigma"},{"email":"jonathan.cook@sigmacomputing.com","name":"jonathan-cook-sigma"},{"email":"enzo@sigmacomputing.com","name":"vincenzoizzo"},{"email":"ying@sigmacomputing.com","name":"yingchou"},{"email":"michael.imevbore@sigmacomputing.com","name":"mimevbore"},{"email":"jasmine@sigmacomputing.com","name":"jsmn-hou"},{"email":"juwon@sigmacomputing.com","name":"jleeee"},{"email":"koji@sigmacomputing.com","name":"kojipereira"},{"email":"tristin@sigmacomputing.com","name":"tristine"},{"email":"Jeremie@sigmacomputing.com","name":"jeremietex"},{"email":"razi@sigmacomputing.com","name":"sigmaraz"},{"email":"mp@sigmacomputing.com","name":"mpccisme"},{"email":"andrew.tran@sigmacomputing.com","name":"andrew.tran07"},{"email":"sahil@sigmacomputing.com","name":"sahilsalim99"},{"email":"louis@sigmacomputing.com","name":"louisshyers"},{"email":"boris@sigmacomputing.com","name":"borissigma"},{"email":"yinpeng@sigmacomputing.com","name":"yinpengsig"},{"email":"ryan.kahn@sigmacomputing.com","name":"ryan-sigma"},{"email":"mark@sigmacomputing.com","name":"micalazalea"},{"email":"christopher.mouri@sigmacomputing.com","name":"christophermouri"},{"email":"miranda.billawala@sigmacomputing.com","name":"mirandabillawala"},{"email":"yash.sharma@sigmacomputing.com","name":"yashsvisharma"},{"email":"dhyey@sigmacomputing.com","name":"dhyeysigma"},{"email":"ayman@sigmacomputing.com","name":"ayman-sigma"},{"email":"aditya@sigmacomputing.com","name":"adityasigmacomputing"},{"email":"alyssa.tsuno@sigmacomputing.com","name":"alyssatsuno"},{"email":"alexis@sigmacomputing.com","name":"alexisjohnson"},{"email":"nat@sigmacomputing.com","name":"natbolton"},{"email":"jimmy.cheung@sigmacomputing.com","name":"jcheung-sigma"},{"email":"svc-prod-winfra-npm@sigmacomputing.com","name":"svc-prod-winfra-npm"},{"email":"alison.lai@sigmacomputing.com","name":"alison.lai"},{"email":"bendy@sigmacomputing.com","name":"bendyshen-sigma"},{"email":"rohan.sehgal@sigmacomputing.com","name":"rohan322"},{"email":"yvonne@sigmacomputing.com","name":"wangyvonne"},{"email":"svc-prod-winfra-gcp@sigmacomputing.com","name":"svc-prod-winfra-gcp"},{"email":"gokturk@sigmacomputing.com","name":"ggezer"},{"email":"jeffrey.chin@sigmacomputing.com","name":"jeffreychin"},{"email":"riley.crahen@sigmacomputing.com","name":"rileycrahen"},{"email":"vandit@sigmacomputing.com","name":"vandit-sigma"},{"email":"harrison@sigmacomputing.com","name":"ding-harrison"},{"email":"nishant@sigmacomputing.com","name":"nischo22"},{"email":"jialei@sigmacomputing.com","name":"jialeijin"},{"email":"madison@sigmacomputing.com","name":"madisonchamberlain"},{"email":"jlg@sigmacomputing.com","name":"jlgjlg"},{"email":"varyn@sigmacomputing.com","name":"varyn"},{"email":"cheng@sigmacomputing.com","name":"czhang_sigmacomputing"},{"email":"anna@sigmacomputing.com","name":"aarshinova"},{"email":"pengbei@sigmacomputing.com","name":"pengbei"},{"email":"joseph.schuman@sigmacomputing.com","name":"jmschuman"},{"email":"anushant@sigmacomputing.com","name":"asingh888"},{"email":"greta@sigmacomputing.com","name":"gsharoya"},{"email":"brandon.dixon@sigmacomputing.com","name":"brandon.dixon"},{"email":"punnal@sigmacomputing.com","name":"punnal"},{"email":"shawn.lin@sigmacomputing.com","name":"shawn-lin"},{"email":"stephen@sigmacomputing.com","name":"delvalle84"},{"email":"nitya@sigmacomputing.com","name":"nsunkad"},{"email":"shubhangi@sigmacomputing.com","name":"shubhangi.srivastava"},{"email":"eric@sigmacomputing.com","name":"ericbannatyne-sigma"},{"email":"hannah@sigmacomputing.com","name":"hannahsigma"},{"email":"akshay@sigmacomputing.com","name":"arangasai"},{"email":"fanfan@sigmacomputing.com","name":"fanfan-sigma"},{"email":"daisy@sigmacomputing.com","name":"daisywang"},{"email":"crew@sigmacomputing.com","name":"crewtaylorsc"},{"email":"guy@sigmacomputing.com","name":"guyatsigma"},{"email":"ioana@sigmacomputing.com","name":"munteanuic"},{"email":"halden@sigmacomputing.com","name":"halden-sigma"},{"email":"liam@sigmacomputing.com","name":"liamnorm"},{"email":"simin@sigmacomputing.com","name":"simingu"},{"email":"sam.hernandez@sigmacomputing.com","name":"samhv0"},{"email":"essa@sigmacomputing.com","name":"eansari-sigma"},{"email":"ric@sigmacomputing.com","name":"ric-sigma-computing"},{"email":"david.max@sigmacomputing.com","name":"davidmax-sigma"},{"email":"ratna@sigmacomputing.com","name":"ratnashiv"}],"readme":"# SAML2-js\n\n[![CircleCI](https://circleci.com/gh/Clever/saml2/tree/master.svg?style=svg)](https://circleci.com/gh/Clever/saml2/tree/master)\n\n`saml2-js` is a node module that abstracts away the complexities of the SAML protocol behind an easy to use interface.\n\n## Usage\n\nInstall with [npm](https://www.npmjs.com/).\n\n```bash\n  npm install saml2-js --save\n```\n\nInclude the SAML library.\n\n```javascript\n  var saml2 = require('saml2-js');\n```\n\n## Documentation\n\nThis library exports two constructors.\n\n- [`ServiceProvider`](#ServiceProvider) - Represents a service provider that relies on a trusted [`IdentityProvider`](#IdentityProvider) for authentication and authorization in the SAML flow.\n- [`IdentityProvider`](#IdentityProvider) - Represents an online service that authenticates users in the SAML flow.\n\n<a name=\"note_options\" />\n\n**Note:**  Some options can be set on the [SP](#ServiceProvider), [IdP](#IdentityProvider), and/or on a per-method basis. For the options that are set in multiple places, they are overridden in the following order: per-method basis *overrides* [IdP](#IdentityProvider) which *overrides* [SP](#ServiceProvider).\n\n<a name=\"ServiceProvider\" />\n\n### ServiceProvider(options)\nRepresents a service provider that relies on a trusted [`IdentityProvider`](#IdentityProvider) for authentication and authorization in the SAML flow.\n\n#### Options\nAn object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n\n- `entity_id` - **Required** - Unique identifier for the service provider, often the URL of the metadata file.\n- `private_key` - **Required** - (PEM format string) - Private key for the service provider.\n- `certificate` - **Required** - (PEM format string) - Certificate for the service provider.\n- `assert_endpoint` - **Required** - URL of service provider assert endpoint.\n- `alt_private_keys` - (Array of PEM format strings) - Additional private keys to use when attempting to decrypt responses. Useful for adding backward-compatibility for old certificates after a rollover.\n- `alt_certs` - (Array of PEM format strings) - Additional certificates to expose in the SAML metadata. Useful for staging new certificates for rollovers.\n- `audience` - (String or RegExp) — If set, at least one of the `<Audience>` values within the `<AudienceRestriction>` condition of a SAML authentication response must match. Defaults to `entity_id`.\n- `notbefore_skew` - (Number) – To account for clock skew between IdP and SP, accept responses with a NotBefore condition ahead of the current time (according to our clock) by this number of seconds. Defaults to 1. Set it to 0 for optimum security but no tolerance for clock skew.\n- `force_authn` - (Boolean) - If true, forces re-authentication of users even if the user has a SSO session with the [IdP](#IdentityProvider).  This can also be configured on the [IdP](#IdentityProvider) or on a per-method basis.\n- `auth_context` - Specifies `AuthnContextClassRef`.  This can also be configured on a per-method basis.\n- `nameid_format` - Format for Name ID.  This can also be configured on a per-method basis.\n- `sign_get_request` - (Boolean) - If true, signs the request.  This can also be configured on the [IdP](#IdentityProvider) or on a per-method basis.\n- `allow_unencrypted_assertion` - (Boolean) - If true, allows unencrypted assertions.  This can also be configured on the [IdP](#IdentityProvider) or on a per-method basis.\n\n#### Returns the following functions\n- [`create_login_request_url(IdP, options, cb)`](#create_login_request_url) - Get a URL to initiate a login.\n- [`redirect_assert(IdP, options, cb)`](#redirect_assert) - Gets a SAML response object if the login attempt is valid, used for redirect binding.\n- [`post_assert(IdP, options, cb)`](#post_assert) - Gets a SAML response object if the login attempt is valid, used for post binding.\n- [`create_logout_request_url(IdP, options, cb)`](#create_logout_request_url)- Creates a SAML Request URL to initiate a user logout.\n- [`create_logout_response_url(IdP, options, cb)`](#create_logout_response_url) - Creates a SAML Response URL to confirm a successful [IdP](#IdentityProvider) initiated logout.\n- [`create_metadata()`](#create_metadata) - Returns the XML metadata used during the initial SAML configuration.\n\n#### Example\n```javascript\n\n  var sp_options = {\n    entity_id: \"https://sp.example.com/metadata.xml\",\n    private_key: fs.readFileSync(\"key-file.pem\").toString(),\n    certificate: fs.readFileSync(\"cert-file.crt\").toString(),\n    assert_endpoint: \"https://sp.example.com/assert\",\n    force_authn: true,\n    auth_context: { comparison: \"exact\", class_refs: [\"urn:oasis:names:tc:SAML:1.0:am:password\"] },\n    nameid_format: \"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\",\n    sign_get_request: false,\n    allow_unencrypted_assertion: true\n  }\n\n  // Call service provider constructor with options\n  var sp = new saml2.ServiceProvider(sp_options);\n\n  // Example use of service provider.\n  // Call metadata to get XML metatadata used in configuration.\n  var metadata = sp.create_metadata();\n\n```\n\n#### Service provider function definitions\n\n<a name=\"create_login_request_url\" />\n\n##### create_login_request_url(IdP, options, cb)\nGet a URL to initiate a login.\n\nTakes the following arguments:\n- `IdP` - [IdP](#IdentityProvider)\n- `options` - An object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n  - `relay_state` - SAML relay state.\n  - `auth_context` - Specifies `AuthnContextClassRef`.  This can also be configured on the [SP](#ServiceProvider).\n  - `nameid_format` - Format for Name ID.  This can also be configured on the [SP](#ServiceProvider).\n  - `force_authn`- (Boolean) - If true, forces re-authentication of users even if the user has a SSO session with the [IdP](#IdentityProvider).  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  - `sign_get_request` - (Boolean) - If true, signs the request.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n- `cb(error, login_url, request_id)` - Callback called with the login URL and ID of the request.\n\n\n<a name=\"redirect_assert\" />\n\n##### redirect_assert(IdP, options, cb)\nGets a SAML response object if the login attempt is valid, used for redirect binding.\n\nTakes the following arguments:\n- `IdP` - [IdP](#IdentityProvider)\n- `options` - An object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n  - `request_body` - (Object) - An object containing the parsed query string parameters.  This object should contain the value for either a `SAMLResponse` or `SAMLRequest`.\n  - `allow_unencrypted_assertion` - (Boolean) - If true, allows unencrypted assertions.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  - `require_session_index` - (Boolean) - If false, allow the assertion to be valid without a `SessionIndex` attribute on the `AuthnStatement` node.\n- `cb(error, response)` - Callback called with the [request response](#assert_response).\n\n<a name=\"assert_response\" />\nExample of the SAML assert response returned:\n\n  ```javascript\n  { response_header:\n     { id: '_abc-1',\n       destination: 'https://sp.example.com/assert',\n       in_response_to: '_abc-2' },\n    type: 'authn_response',\n    user:\n     { name_id: 'nameid',\n       session_index: '_abc-3',\n       attributes:\n        { 'http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname': [ 'Test' ] } } }\n  ```\n\n<a name=\"post_assert\" />\n\n##### post_assert(IdP, options, cb)\nGets a SAML response object if the login attempt is valid, used for post binding.\n\nTakes the following arguments:\n- `IdP` - [IdP](#IdentityProvider)\n- `options` - An object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n  - `request_body` - (Object) - An object containing the parsed query string parameters.  This object should contain the value for either a `SAMLResponse` or `SAMLRequest`.\n  - `allow_unencrypted_assertion` - (Boolean) - If true, allows unencrypted assertions.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  - `require_session_index` - (Boolean) - If false, allow the assertion to be valid without a `SessionIndex` attribute on the `AuthnStatement` node.\n  - `audience` - (String or RegExp) — If set, at least one of the `<Audience>` values within the `<AudienceRestriction>` condition of a SAML authentication response must match. Defaults to `entity_id`.\n  - `notbefore_skew` - (Number) – To account for clock skew between IdP and SP, accept responses with a NotBefore condition ahead of the current time (according to our clock) by this number of seconds. Defaults to 1. Set it to 0 for optimum security but no tolerance for clock skew.\n- `cb(error, response)` - Callback called with the [request response](#assert_response).\n\n\n<a name=\"create_logout_request_url\" />\n\n##### create_logout_request_url(IdP, options, cb)\nCreates a SAML Request URL to initiate a user logout.\n\nTakes the following arguments:\n- `IdP` - [IdP](#IdentityProvider).  Note: Can pass `sso_logout_url` instead of IdP.\n- `options` - An object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n  + `name_id` - Format for Name ID.  This can also be configured on a per-method basis.\n  + `session_index` - Session index to use for creating logout request.\n  + `allow_unencrypted_assertion` - (Boolean) - If true, allows unencrypted assertions.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  + `sign_get_request` - (Boolean) - If true, signs the request.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  + `relay_state` - SAML relay state.\n- `cb(error, request_url)` - Callback called with the logout request url.\n\n\n<a name=\"create_logout_response_url\" />\n\n##### create_logout_response_url(IdP, options, cb)\nCreates a SAML Response URL to confirm a successful [IdP](#IdentityProvider) initiated logout.\n\nTakes the following arguments:\n- `IdP` - [IdP](#IdentityProvider).  Note: Can pass `sso_logout_url` instead of IdP.\n- `options` - An object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n  + `in_response_to` - The ID of the request that this is in response to. Should be checked against any sent request IDs.\n  + `sign_get_request` - (Boolean) - If true, signs the request.  This can also be configured on the [IdP](#IdentityProvider) or [SP](#ServiceProvider).\n  + `relay_state` - SAML relay state.\n- `cb(error, response_url)` - Callback called with the logout response url.\n\n<a name=\"create_metadata\" />\n\n##### create_metadata()\nReturns the XML metadata used during the initial SAML configuration.\n\n<a name=\"IdentityProvider\" />\n\n### IdentityProvider(options)\nRepresents an online service that authenticates users in the SAML flow.\n\nReturns no functions, exists solely to be passed to an [SP](#ServiceProvider) function.\n\n#### Options\nAn object that can contain the below options.  All options are strings, unless specified otherwise.  See [note](#note_options) for more information on options.\n\n- `sso_login_url` - **Required** - Login url to use during a login request.\n- `sso_logout_url` - **Required** - Logout url to use during a logout request.\n- `certificates` - **Required** - (PEM format string or array of PEM format strings) - Certificate or certificates (array of certificate) for the identity provider.\n- `force_authn` - (Boolean) - If true, forces re-authentication of users even if the user has a SSO session with the [IdP](#IdentityProvider).  This can also be configured on the [SP](#ServiceProvider) or on a per-method basis.\n- `sign_get_request` - (Boolean) - If true, signs the request.  This can also be configured on the [[SP](#ServiceProvider) or on a per-method basis.\n- `allow_unencrypted_assertion` - (Boolean) - If true, allows unencrypted assertions.  This can also be configured on the [SP](#ServiceProvider) or on a per-method basis.\n\n#### Example\n```javascript\n\n  // Initialize options object\n  var idp_options = {\n    sso_login_url: \"https://idp.example.com/login\",\n    sso_logout_url: \"https://idp.example.com/logout\",\n    certificates: [fs.readFileSync(\"cert-file1.crt\").toString(), fs.readFileSync(\"cert-file2.crt\").toString()],\n    force_authn: true,\n    sign_get_request: false,\n    allow_unencrypted_assertion: false\n  };\n\n  // Call identity provider constructor with options\n  var idp = new saml2.IdentityProvider(idp_options);\n\n  // Example usage of identity provider.\n  // Pass identity provider into a service provider function with options and a callback.\n  sp.post_assert(idp, {}, callback);\n\n```\n\n\n## Example: Express implementation\n\nLibrary users will need to implement a set of URL endpoints, here is an example of [express](http://expressjs.com/) endpoints.\n\n```javascript\nvar saml2 = require('saml2-js');\nvar fs = require('fs');\nvar express = require('express');\nvar app = express();\nvar bodyParser = require('body-parser');\napp.use(bodyParser.urlencoded({\n  extended: true\n}));\n\n// Create service provider\nvar sp_options = {\n  entity_id: \"https://sp.example.com/metadata.xml\",\n  private_key: fs.readFileSync(\"key-file.pem\").toString(),\n  certificate: fs.readFileSync(\"cert-file.crt\").toString(),\n  assert_endpoint: \"https://sp.example.com/assert\"\n};\nvar sp = new saml2.ServiceProvider(sp_options);\n\n// Create identity provider\nvar idp_options = {\n  sso_login_url: \"https://idp.example.com/login\",\n  sso_logout_url: \"https://idp.example.com/logout\",\n  certificates: [fs.readFileSync(\"cert-file1.crt\").toString(), fs.readFileSync(\"cert-file2.crt\").toString()]\n};\nvar idp = new saml2.IdentityProvider(idp_options);\n\n// ------ Define express endpoints ------\n\n// Endpoint to retrieve metadata\napp.get(\"/metadata.xml\", function(req, res) {\n  res.type('application/xml');\n  res.send(sp.create_metadata());\n});\n\n// Starting point for login\napp.get(\"/login\", function(req, res) {\n  sp.create_login_request_url(idp, {}, function(err, login_url, request_id) {\n    if (err != null)\n      return res.send(500);\n    res.redirect(login_url);\n  });\n});\n\n// Assert endpoint for when login completes\napp.post(\"/assert\", function(req, res) {\n  var options = {request_body: req.body};\n  sp.post_assert(idp, options, function(err, saml_response) {\n    if (err != null)\n      return res.send(500);\n\n    // Save name_id and session_index for logout\n    // Note:  In practice these should be saved in the user session, not globally.\n    name_id = saml_response.user.name_id;\n    session_index = saml_response.user.session_index;\n\n    res.send(\"Hello #{saml_response.user.name_id}!\");\n  });\n});\n\n// Starting point for logout\napp.get(\"/logout\", function(req, res) {\n  var options = {\n    name_id: name_id,\n    session_index: session_index\n  };\n\n  sp.create_logout_request_url(idp, options, function(err, logout_url) {\n    if (err != null)\n      return res.send(500);\n    res.redirect(logout_url);\n  });\n});\n\napp.listen(3000);\n\n```\n","readmeFilename":"README.md"}