SAML Single Sign-On
This functionality is Live and ready to use in production.
SAML Single Sign-On (SSO) allows enterprise merchant users to access the TableCheck Manager in-restaurant application using their existing corporate login session. This uses the SAML 2.0 (Security Assertion Markup Language) authentication mechanism, without requiring an additional password. This is also referred to as a “Federated Login”.
Important: SAML SSO for merchants should not be confused with TableCheck Booking Page SSO for diners. For the latter, please refer to the Web Booking v1 API.
Target Audience
SAML Single Sign-On is recommended for use by large enterprises such as hotel brands who have a corporate network environment.
The below is a partial list of authentication systems which can support SAML 2.0:
Active Directory Federation Services (ADFS)
Auth0
Azure Active Directory
Bitium
Centrify
Duo Security
Entrust
Google Workspace (formerly G Suite)
F5 Big-IP
Okta
OneLogin
PortalGuard
SecureAuth
Zoho
Implementation Guide
Core Concepts
In a SAML 2.0 authentication flow:
Your authentication service acts as the Identity Provider (“IdP”). It provides trusted information about the user’s identity.
TableCheck acts as the Service Provider (“SP”). We are the service which the user wishes to access.
When your user accesses the TableCheck Manager via the web, TableCheck communicates with your IdP system using SAML to verify the user’s identity. Specifically we require their email address, which is used as the login username in our system.
All SAML requests a digitally signed, meaning that we as the SP can trust the user is who your IdP says he/she is and securely log them into our system.
Implementation Workflow
Step 1. Prepare your IdP Service and IdP Metadata XML
Please generate a SAML IdP Metadata XML file using your Authentication Service. Kindly refer to your Authentication Service Provider’s documentation regarding specific configurations.
IdP Service Configuration
Please ensure that your IdP service is configured as follows:
Your SAML IdP endpoints (
SingleSignOnService
, etc.) must use HTTPS.Your SAML IdP system must have “signing” enabled on messages.
We prefer for your SAML IdP system disable “encryption”. If your policy requires it, please ensure it is possible to disable during testing in order to facilitate troubleshooting.
IdP Metadata XML Format
Your IdP Metadata XML MUST include the elements as specified in the below table. Please check each item carefully. Please refer to Appendix I for sample IdP metadata file. Note that the namespaces ds:
and md:
may vary depending on your file. Please inform us if your authentication provider does not allow you to meet any specific requirement below.
XML Element | Required? | Meaning |
---|---|---|
| Yes | The digital signature of the metadata file. |
| Yes | Indicates that this is an IdP metadata file. |
| Do not want | We prefer to disable encryption, so this element should not be present in your SAML. |
| Yes | Your public key used to verify digitally-signed SAML messages. |
| Yes | We prefer that you use that you use |
| Yes | The URL of your single sign-on service. We prefer to use |
| No | The URL of your single logout service. Optional but recommended. As per above we prefer |
Step 2. Determine your NameIDFormat value in your IdP Metadata XML
In order to login via SAML, TableCheck matches the NameID
(user ID) in your IdP Assertion with the user IDs in TableCheck system. Your NameIDFormat
specified in your IdP Metadata XML specifies what value you send TableCheck as the user ID (e.g. email, employee ID, etc.) TableCheck typically uses email addresses as our identifier for our user accounts.
We can support several patterns of NameIDFormat
. Please read the below carefully to determine which is appropriate for your use case.
Pattern A: Use NameIDFormat “emailAddress” (preferred)
If you all your users have a standardized email address, please set NameIDFormat
as urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress
in your IdP Metadata XML. We will directly match the email in your SAML to TableCheck user accounts (case-insensitive.)
Pattern B: Use an employee ID and create dummy email accounts in TableCheck
If your users do not have a standardized email address, and you use an alternative identifier such as an employee ID, we recommend to setup TableCheck user accounts with “dummy” email addresses. For example, if your employee’s ID is ABC123
, we would create a TableCheck user account as abc123@your-company.com
. (Such user accounts do not need to have a real-world email inbox.)
In order to use this pattern:
Your IDs must be case-insensitive. For example,
ABC123
andabc123
are considered the same ID.Your IDs must never contain the
@
character, as it would be confused with an email address.Your ID should be unique for each employee (though not a hard requirement.)
You should include the employee’s email (if available) in your IdP Assertion as an
Email
SAML attribute.
If your wish to use this pattern, please set NameIDFormat
in your IdP Metadata XML as one of the following values:
urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified
urn:oasis:names:tc:SAML:2.0:nameid-format:persistent
Lastly, it is possible to use both employee IDs and real email addresses on a per-user basis, however, please discuss with TableCheck’s API team first.
Pattern C: Other NameIDFormat or Attribute
If neither Pattern A nor B satisfies your requirements, please discuss with TableCheck’s API team. Kindly note that we cannot support temporary or single-use login IDs (e.g. urn:oasis:names:tc:SAML:2.0:nameid-format:transient
)
Step 3. (Recommended) Prepare an IdP Metadata Web Service
Please prepare an HTTPS URL endpoint at which we may retrieve your latest IdP Metadata in XML format via a GET
request. This helps to facilitate key rotation.
The URL should return your live IdP Metadata XML, reflecting any changes (config, key additions, etc.) made on your end in real-time.
The
Content-Type
response header must beapplication/xml
, and the response body should contain only your IdP Metadata without additional items.The endpoint should be publicly accessible, i.e. without authentication required.
Please provide separate endpoints for Production and Staging/QA/UAT environments, if applicable.
We will poll the endpoint for changes once per hour.
Please discuss with our team if you are unable to provide such an endpoint.
Step 4. Raise a request to TableCheck
Please send a mail to api@tablecheck with subject “<Your Company> SAML Integration Request”. Please include the following item:
Your IdP Metadata XML.
Can be either as either a URL endpoint (recommended) or XML file.
Please include separate items for both Production and Staging/QA/UAT environments, if applicable.
If you are unable to provide a URL endpoint, please provide an email address at which we may notify when new signing certificates are issued.
Your
NameIDFormat
and an explanation of we can match your user IDs to TableCheck user accounts (see above.)An explanation of your IdP certificate rotation methodology.
Refer to “Certificate Expiry and Rotation” section below.
Your requirements for the SP digital signing certificates used by TableCheck, if any
Please check if your policy requires use of a specific certificate authority (e.g. in-house).
If not specified, we will use self-signed SP certificates.
A list of email domains to whitelist for SAML access.
Please list an any subdomains explicitly.
Example:
@your-company.com, @sub.your-company.com, @other.domain.com
A list of emails (or user IDs) to create test user accounts for both Staging/QA/UAT and Production certification testing.
* Items 5 and 6 above may be provided during certification testing.
Step 5. TableCheck configures your SAML Integration
Upon receipt of Step 3, the TableCheck API Team will take approximately 5 business days to configure your SAML Metadata. If any issues are found with respect to the above requirements, we will ask you to re-submit your file and the process will be delayed.
When configuration is complete, we will reply by email with:
The list of test user accounts we have added in the TableCheck system.
Our SP Metadata URL.
Step 6. Upload and configure TableCheck’s SP Metadata in your system
Our SP Metadata is accessible via HTTPS endpoints resembling the below URLs. Our SP Metadata will be digitally signed as instructed in Step 3.
https://id.app.tablecheck.com/sso/saml/<your company>/metadata/sp
Our SP Metadata XML specific to your SAML integration. Please use this to configure your SAML integration with us. Please also poll this endpoint regularly (i.e. once per hour) for any changes to keys.https://id.app.tablecheck.com/sso/saml/<your company>/metadata/idp
Our cache of your IdP Metadata XML. Useful for troubleshooting.
Please configure your authentication system to automatically poll these URLs for changes at a 1 hour interval. If this is not possible, you must manually copy the SP Metadata into your system.
Step 7. Certification Testing and Go-Live
Upon your acceptance of our SP Metadata in Step 5, we will schedule certification testing in both Staging and Production environments. As our system allows fully dynamic configuration, we prefer to coordinate testing both Staging and Production in the same session, if permitted by your Change Policy.
Upon successful Go-Live, we will send a Certification Sign-off email and will ask your reply on the same. Following Go-live, our Implementation Team will coordinate with your end-user venues and properties to activate SAML integration for their TableCheck user accounts.
Certificate Expiry and Rotation
This section is a draft. Specific rotation timing is still under discussion.
The IdP and SP XML metadata files contain each party’s certificates for which the opposite party should use when signing and/or encrypting its SAML messages. This section explains methodology by which we can exchange our respective metadata files, to ensure each party has an up-to-date copy of the other party’s certificates.
The digital signing certificates used to sign SAML messages expire after a given validity period, typically between 6 months and 3 years.
SP (TableCheck) Certificate Rotation
Three (3) months in advance of certificate expiry, we will publish new certificate(s) in our SP Metadata URL (see Step 5 above.) For the three month period prior to expiry, the SP Metadata XML will include <md:KeyDescriptor>
elements for both the current and new certificate(s) listed in that order. The current certificate will be used to sign requests until midnight UTC one day before expiry, at which time the new certificate will take effect and the old certificate will be removed.
If you are unable to poll our HTTPS endpoint for changes, we can configure our system to send email alerts at the following timings:
Three (3) months before expiry (when the new certificate is published)
One (1) month before expiry
One (1) week before expiry
IdP (Your) Certificate Rotation
We ask that you follow a similar rotation methodology which includes the following:
Please publish new certificates alongside existing certificates in your IdP Metadata for a reasonable overlap period.
Please provide an HTTPS endpoint at which we may poll for updates to your IdP Metadata. If this is not possible, please provide some alternative method by which you push your updated IdP Metadata to us, e.g. as an attachment to an automated email.
As a shared goal between our companies, we wish to minimize the amount of communication and manual work necessary to perform rotation.
Appendix I: Sample IdP Metadata XML File
The IdP Metadata XML file which you generate should look similar to the following. This file is provided for references purposes only; signatures, etc. will not validate correctly.
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="PRQ9YcZTbZEVxQOzpOMi1m4fT-z" cacheDuration="PT1440M" entityID="YOUR-IDP-ENTITY-HERE">
<?xml version="1.0" encoding="UTF-8"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_958b9b1b-83f0-4e80-b485-6f695d5924b4" entityID="https://www.your-company.com">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_8b9b951b-8830-4ef0-b854-46f6992b45d5">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="#default samlp saml ds xs xsi md"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>HZMF4fEN+2oQxqyD69g2RgQ0P4A=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>wDPBJoiIvHii+L5BCKH7KdCNws1MUGJcLKSsYIceLvJ87j/ONA6g3C3oLGDFi1Ujag4J56Os/EE3L6mo6M2lcJhLXz+jnkVy91EcP4BJ8KDJ9bve/NSw1lg86qSa2yQafNOCalUvyN+St/sn747jB9zVOGG1d1UsaemiGk4AYdNofYcAPG7H8g796vqos5d0p07C81pUZiyog2Rzi5qzHDeX0UTIp4d3Xj5a4mdj6ikySzuW5xLPm6m9uEqqCfPtJwQQH9bOjVxUxR9CQh0bHbGA3gTFMKcav5WO0ZZRcvYgPgjLFmUMEiYll4AmCUgp11XONABjJ9tScbuuHX8v0c+GYjZDWhSL98xgrTMmIdXL/BIRHJnTsHSD2o98a19LQXesY4i9BoqaRkKIOlKYjdGBhp7IfUda+St9WK86XqH4MlRXiN4pUgaISH/hzlgk5kSUSR72qaigqapvJYHbKwtafA3aDu7SZCIm9kapRc3cA7Jy2z1q+ShqIDZ6N5/7PcuH1lB/rWIVtI4zwT6GDLo7QtNDh9oXjmqbs3Me5xLKjnMNXB+eLRRF8PtyHkiswDo0Mf0N7S4diD/Vwesyp3FeGAhMhltgyST81dszw0wtJQvz42Xa7vizen1HaN8uGZluuI4AgnJVqdAygoKV7mKs73bj5KVqx1yyrAllkDA=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>MIIF9TCCA92gAwIBAgIUKm08rSr+QXUZij8G8H4y0Wrd7+cwDQYJKoZIhvcNAQELBQAwgYkxCzAJBgNVBAYTAkpQMQ4wDAYDVQQIDAVUb2t5bzEQMA4GA1UEBwwHQ2h1by1rdTEYMBYGA1UECgwPVGFibGVDaGVjayBJbmMuMRswGQYDVQQDDBJ3d3cudGFibGVjaGVjay5jb20xITAfBgkqhkiG9w0BCQEWEmFwaUB0YWJsZWNoZWNrLmNvbTAeFw0yMTA4MTExOTI2NTVaFw0yMTA5MTAxOTI2NTVaMIGJMQswCQYDVQQGEwJKUDEOMAwGA1UECAwFVG9reW8xEDAOBgNVBAcMB0NodW8ta3UxGDAWBgNVBAoMD1RhYmxlQ2hlY2sgSW5jLjEbMBkGA1UEAwwSd3d3LnRhYmxlY2hlY2suY29tMSEwHwYJKoZIhvcNAQkBFhJhcGlAdGFibGVjaGVjay5jb20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDfHD7EEv2HFElVh343KV1YwwV/5QyjL0nzmzE0TNovL+vf75k3rBUHDLNlKfW1v/PNVQNhkD0JCOmcXNSaJRlKn+0hhwO5Hjy+SqccBak3bzOvtvXvz2614Z02xraJ2THcUhTcpWLbEehyVkdJykyxdguB/FAFkbzYAF68xIkkvmRceuVN3KQAbxSwYIBg1GE4hyoq98qDGz/KgrWC7fQ5ylKXMMd7zlSFvgE20nTc/ONlotlMh89rcIaiBOWEfJz/0ttKzpQbeL23MPuJmNXKHIxxX5nVUHxydSMkhKNuoU7YT+t/LQOG2Ss1iUccmHoPy9wRVaxZeOFJmppRpPJdMKeoBESje10UzeK1MhQ9R1wnXUfl8mt7c3GOxGXhs+FLzBsyObExD9nRV8+vdkw91AJOkOtzKKz0CMrLmLVnclWgIwNswsyXf66zWVxmIkTybeXXa8QinJLJy74zGvbksQrt1bzU9gsYW6doXPPMbG/cNWhBqe0xpO8n6arHG8kGS9aoj9APYtLfHN4aaZ1zDQmPBB3fVgaJ366nprmFpDn7uNqusohb+AEJYmNHki88kUZlu+D3voR4FivEGsm7kDKCj9m+aSw2uc9QfQ7QaQBpj7xW7nEnruJykLNqdBG5m9YBxVCbWX7ZuOR9xd8HdWVCQ4v+pySMT6quxFB98QIDAQABo1MwUTAdBgNVHQ4EFgQUldesTYIzhhjgUYXAMxCLQ8/y6tswHwYDVR0jBBgwFoAUldesTYIzhhjgUYXAMxCLQ8/y6tswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAkzYSBXceSvl15cc/hBhkdcX9xYJuxws8assxDCn7De+sb7OUAXryIdpMd3LE4zvjSU50QoTXWzfvK9jA42dZ7jSN1EnRPwv2XXNN8cYcqPJDHO22iw3UL9ecWI7b9c+1Z0C66iP6qQDzsge6/GynWoRHGzPvyf/8YFHKJyDYzVd3aTY2vIn2Yf5Izbn1/TwIBjk9PBq8w8FhXWAR/eeJYJ7vhrn5p1MpiaFarRNLdte1xI3RRuysX24os+tf1EXsMpohiWL2NzNJMRD3S8lRKkK1VIDh01sR64WmD2BAnrxraObHBxGqfqxu30aJRuwfSNRR8mDF0ZqaAhAkH2etVR6ro8rzDZcSsaMRP7CBJzSXLdSztR63fqgt9mQ0MOwj4KBjBsoZSlDb5VDxLeNlFyRcd28/zi5e/8co2g3c27rRewaciIIvzY7pYi1XFBkW7vs2w0fUlSYj5VHfF3nAgh8iM5x3MB7ENMdIpksZgQ6d7kIAjXZO6xoYDEcHE5CHsau9KiptYjCOgOc+eFrmu4IECoLWWvRpF9VHoA6xR3NGri7DHQxpTthsmM5dBScI+9e1RZ/MgllAdohhNiPpwA6UfURCYvOqOCkqHglwA16QwFge25DNrkWHvLini1VCDPRntASixQ6CX3hO546DsR6lNfGQ35I8db3qrARywfo=</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<md:IDPSSODescriptor protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol" WantAuthnRequestsSigned="true">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>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</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:KeyDescriptor use="encryption">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>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</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.your-company.com/auth/idp/sso.saml2"/>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://www.your-company.com/auth/idp/sso.saml2"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://www.your-company.com/auth/idp/logout.saml2"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://www.your-company.com/auth/idp/logout.saml2"/>
</md:IDPSSODescriptor>
<md:Organization>
<md:OrganizationName xml:lang="en-US">Your Company Inc.</md:OrganizationName>
<md:OrganizationDisplayName xml:lang="en-US">Your Company</md:OrganizationDisplayName>
<md:OrganizationURL xml:lang="en-US">https://www.your-company.com</md:OrganizationURL>
</md:Organization>
<md:ContactPerson contactType="technical">
<md:GivenName>Your Team</md:GivenName>
<md:EmailAddress>team@your-company.com</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>
Appendix II: Sample TableCheck SP Metadata XML File
TableCheck’s SP Metadata XML will look similar to the following. This file is provided for references purposes only; signatures, etc. will not validate correctly. Note that this file contains TableCheck’s certificates.
<?xml version="1.0"?>
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata" ID="_23068e34-c3eb-428e-a749-5b98591093c7" entityID="https://www.tablecheck.com/tablecheck_manager">
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
<ds:Reference URI="#_23068e34-c3eb-428e-a749-5b98591093c7">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#">
<ec:InclusiveNamespaces xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#" PrefixList="#default samlp saml ds xs xsi md"/>
</ds:Transform>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
<ds:DigestValue>5N6zMkpNqbgs+UClAljmKLW2l80=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>eMjaHs5UYVT9UTEULM/YeZmqMKM0q1kl32f3vIMeafl8k9wdWIbH36seelb/qrcHx8oQf4NyNj1+H+jJ1miJv+WScpTPpWtBYu0bJszJRAG7Fd2e1I+bYoYpuDOZLvcujTaGm5qbAOGI5BR7E1218Xz3D5M2rsxrCEmbWqxE/ujV8jxf/3Vd/sxhhcRXL+vSPxJ5IzQJ46pgV6dcDZWEuuVbdeX4Z0pXenAzMf558zE6P16hUO/KCioO9cLSDxuLc6v3CAMdAkGpxCJv0KQihfQbGYDxd7cXPOdykH+l5rAR2cFuTWQ49agEUoFZ/A1jZWmk93w3dRaAkVpaPhJEAQ6I+exwI+ZyUK6e8fJEwotLAtlUsi4gfX5JPOJ0l/v9/S/OGVpggI7kklSHa6pCq1yFdv2Gz7DIiDEPhdeHlgOjuPgaE0ePbkRP7Vht1IuHdUo9TbcgSGBAan0iqGU7Md6sUWXS9cW6HMRbTZ/HBhaLWGDFLYtP/P5Hs63piu/X4eHGLhHMYL0klZ1QY78HDiclrGqHlulzZ501uku1xe5ELXWNdU2G7TZj9i14Lv5zS93BJiepkr/df3+xHM864e83RBra5I3K5NH6BpIcrQBgBUmVgT498an+Mfg26OTJ4tbrot6O8fVxQrDzB+rhhgtObYK+rZntclL8fm0In/M=</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>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</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
<md:SPSSODescriptor AuthnRequestsSigned="true" WantAssertionsSigned="true" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Data>
<ds:X509Certificate>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</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://id.app.tablecheck.com/sso/saml/fourseasons/logout" ResponseLocation="https://id.app.tablecheck.com/sso/saml/fourseasons/logout"/>
<md:NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</md:NameIDFormat>
<md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://id.app.tablecheck.com/sso/saml/fourseasons" index="0" isDefault="true"/>
</md:SPSSODescriptor>
<md:Organization>
<md:OrganizationName xml:lang="en-US">TableCheck Inc.</md:OrganizationName>
<md:OrganizationDisplayName xml:lang="en-US">TableCheck</md:OrganizationDisplayName>
<md:OrganizationURL xml:lang="en-US">https://www.tablecheck.com</md:OrganizationURL>
</md:Organization>
<md:ContactPerson contactType="technical">
<md:GivenName>TableCheck API Team</md:GivenName>
<md:EmailAddress>api@tablecheck.com</md:EmailAddress>
</md:ContactPerson>
<md:ContactPerson contactType="support">
<md:GivenName>TableCheck Support Team</md:GivenName>
<md:EmailAddress>support@tablecheck.com</md:EmailAddress>
</md:ContactPerson>
</md:EntityDescriptor>
For further inquiries and assistance, please contact api@Tablecheck.com.