Introduction
This is about authentication / authorisation while building your web apps.
I included single-sign-on feature in my web application. Then, after integrating my app with SSO, I performed login operation and saw this saml response after authentication.
sh:root
sh:book /sh:book
sh:genre /sh:genre
sh:id /sh:id
sh:book /sh:book
sh:genre /sh:genre
sh:id /sh:id
sh:book /sh:book
sh:genre /sh:genre
sh:id /sh:id
/sh:root
Apologies.. I don't know how to include html tags in this post :P
How do I handle this? I need a JSON/ object to fetch the concerned values.
I followed these steps to convert it to a json object:
1) Decoded the saml response to xml.
2) Then, parsed xml to object/ JSON to fetch required fields.
For decoding the saml response, I used "saml-encoder-decoder-js" npm package and for parsing xml to object I went for "xml2js".
Usage:
let decoder = require('saml-encoder-decoder-js'),
parseString = require("xml2js").parseString,
stripPrefix = require("xml2js").processors.stripPrefix;
app.post('/login/callback', function(req, res) {
const xmlResponse = req.body.SAMLResponse;
decoder.decodeSamlPost(xmlResponse, (err,xmlResponse) => {
if(err) {
throw new Error(err);
} else {
parseString(xmlResponse, { tagNameProcessors: [stripPrefix] },
function(err, result) {
if (err) {
throw err;
} else {
console.log(result); //End result
}
});
}
})
res.redirect('http://localhost:3000');
}
);
Note: stripPrefix to get rid of namespace prefix.
to fetch "root" from "sh:root".
So, the end result gave me the json I was looking for.
Hope, you find this article worthy enough to have a glance.
Cheers !!!
Discussion (0)