mocksaml/utils/idp.ts

55 lines
1.5 KiB
TypeScript
Raw Normal View History

import xmlbuilder from 'xmlbuilder';
2022-02-21 16:23:43 +00:00
import { stripCertHeaderAndFooter } from './certificate';
const createIdPMetadataXML = async ({
idpEntityId,
idpSsoUrl,
certificate,
}: {
idpEntityId: string;
idpSsoUrl: string;
certificate: string;
}): Promise<string> => {
2022-02-22 06:14:12 +00:00
certificate = stripCertHeaderAndFooter(certificate);
2022-02-21 16:23:43 +00:00
const nodes = {
EntityDescriptor: {
'@xmlns:md': 'urn:oasis:names:tc:SAML:2.0:metadata',
'@entityID': idpEntityId,
'@validUntil': '2026-06-22T18:39:53.000Z',
IDPSSODescriptor: {
'@WantAuthnRequestsSigned': false,
'@protocolSupportEnumeration': 'urn:oasis:names:tc:SAML:2.0:protocol',
KeyDescriptor: {
'@use': 'signing',
KeyInfo: {
'@xmlns:ds': 'http://www.w3.org/2000/09/xmldsig#',
X509Data: {
X509Certificate: {
'#text': certificate,
},
},
},
},
NameIDFormat: {
'#text': 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',
},
SingleSignOnService: [
{
'@Binding': 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect',
'@Location': idpSsoUrl,
},
{
'@Binding': 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST',
'@Location': idpSsoUrl,
},
],
},
},
};
return xmlbuilder.create(nodes, { encoding: 'UTF-8', standalone: false }).end({ pretty: true });
2022-02-21 16:23:43 +00:00
};
2022-02-22 06:14:12 +00:00
export { createIdPMetadataXML };