如何生成saml 2.0 sso服务元数据

时间:2015-06-11 13:55:00

标签: c# asp.net saml saml-2.0

我们过去创建了许多SAML实现。通常,客户端会向我们发送包含密钥信息,用户信息,证书等的SAML XML数据,我们将解析信息,匹配密钥和证书。从xml获取用户的唯一标识符,然后根据用户是否存在于用户身份对用户进行身份验证,并将登录用户发送到我们域的某个页面。 (我在这里有一个次要问题:这是否使我们成为Saml IdentityProvider或ServiceProvider)。

无论如何,现在这个特定的客户端要求我们向他们发送SAML SSO元数据文件。他们说,为了让他们将联盟从他们的环境部署到我们的环境中,他们需要我们在此处指定的SAML SSO服务元数据的副本http://en.wikipedia.org/wiki/SAML_2.0#SSO_Service_Metadata

那我该怎么办?我们以前从来没有这样的要求。我们不使用任何第三方工具,但使用c#和Visual Studio构建了SAML的自定义实现。请帮忙。

3 个答案:

答案 0 :(得分:1)

如果您处理身份验证,那么您就是IDP。

客户是正确的 - 这是SAML正常工作的方式 - 双方交换元数据。元数据描述了什么配置文件,什么绑定,证书,NameID的格式等等。

做了很多这些,我有些困惑。我从来没有处理过无法提供元数据的IDP!

有.NET 4.5类 - 用于执行此操作的System.IdentityModel.Metadata。

查看开源代码以在IdentityServer中生成元数据。

(注意:这只是WS-Fed,但原理是相同的)。

答案 1 :(得分:1)

如果您不想手工制作,也可以使用SimpleSAML tool为Idp和SP生成它。

答案 2 :(得分:0)

您可以从以下位置生成SAML IdP元数据:https://www.samltool.com/idp_metadata.php

您可以在此处生成SAML SP元数据表单:https://www.samltool.com/sp_metadata.php

元数据是一个简单的xml文件,用于描述您的组织详细信息,例如名称,显示名称,技术联系方式,用于sigining的公共密钥,用于加密的公共密钥等。

这是来自OneLogin SSO提供程序的示例数据:

<?xml version="1.0"?>
<EntityDescriptor xmlns="urn:oasis:names:tc:SAML:2.0:metadata" entityID="https://app.onelogin.com/saml/metadata/703037">
  <IDPSSODescriptor xmlns:ds="http://www.w3.org/2000/09/xmldsig#" protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <KeyDescriptor use="signing">
      <ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
        <ds:X509Data>
          <ds:X509Certificate>MIIELDCCAxSgAwIBAgIUa0r3l1uIkdnRLn5tmlWFHhQ9b5IwDQYJKoZIhvcNAQEF
BQAwXzELMAkGA1UEBhMCVVMxFzAVBgNVBAoMDlRlc3QgT25lIExvZ2luMRUwEwYD
VQQLDAxPbmVMb2dpbiBJZFAxIDAeBgNVBAMMF09uZUxvZ2luIEFjY291bnQgMTE0
MTM0MB4XDTE3MDkxMzA3MjgzNVoXDTIyMDkxNDA3MjgzNVowXzELMAkGA1UEBhMC
VVMxFzAVBgNVBAoMDlRlc3QgT25lIExvZ2luMRUwEwYDVQQLDAxPbmVMb2dpbiBJ
ZFAxIDAeBgNVBAMMF09uZUxvZ2luIEFjY291bnQgMTE0MTM0MIIBIjANBgkqhkiG
9w0BAQEFAAOCAQ8AMIIBCgKCAQEAybMji6l2E/j02P9alspmrKZATV5xQeJ//qp2
Zm+9q52PQ7htY6ijyKjugFZX9AXsi80eZ59RxGenZSig5qTLIl890KTyyv/iPwBN
Nv3K22A8LXtX2R+Jf96brBCDsskbmWmfZrvW6spDwVN8bXfMiP9qDRed6KzgDiSZ
YKkKH7ylMMNLx6Csgj9kbuvr5E9kDs+xoBdqGoeEFbqVsjKupm4MDrQp5S47b8lQ
TwMcVI2LbZhHVhcFlGDLaZ2p1EFwHhyT8KLPI+aiyA6lRbZjtdgZT1IxzN1DcF+f
JLrr5MqwNbdVpNg5C4cBokrr4FLieKjAz5A5Wp37q7pNgE4J2wIDAQABo4HfMIHc
MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFO3qhBXpJjAq4QE5MTOQM9Qdg+UNMIGc
BgNVHSMEgZQwgZGAFO3qhBXpJjAq4QE5MTOQM9Qdg+UNoWOkYTBfMQswCQYDVQQG
EwJVUzEXMBUGA1UECgwOVGVzdCBPbmUgTG9naW4xFTATBgNVBAsMDE9uZUxvZ2lu
IElkUDEgMB4GA1UEAwwXT25lTG9naW4gQWNjb3VudCAxMTQxMzSCFGtK95dbiJHZ
0S5+bZpVhR4UPW+SMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQUFAAOCAQEA
vXydLuW8t22GaDkLDD1CgVDdVkzwUg1UxlnS0bYaENQZIzxzIPk5DW/D8CFLqt3v
kW99KrZBrfCdkcWxvpTQb+Rd9l/eYY4CQazkC8xDrR/alJoHwFX6ROB9QcNUDgu2
ACZ2Mvsy6tRHt2a4JYdy2WImLptVeoO+NaNgKJzohbuBzvaqwqLWmn421g6v5iuy
SyNPBGio5SoZPus3ULFeTeqgFrnbbOpRbDpViCdsI2BbjW9xKQu2KEhX2J5aMYTr
qRdV0lH8BS57/sG0ewcAThg8CdCzi7tCOZtnihdhDT+EVKiiXpZueYJNWTpDDe7I
96e8+UD2AxCcW1YLw7vXMA==</ds:X509Certificate>
        </ds:X509Data>
      </ds:KeyInfo>
    </KeyDescriptor>
    <SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://dnb-dev.onelogin.com/trust/saml2/http-redirect/slo/703037"/>

      <NameIDFormat>urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress</NameIDFormat>

    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" Location="https://dnb-dev.onelogin.com/trust/saml2/http-redirect/sso/703037"/>
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" Location="https://dnb-dev.onelogin.com/trust/saml2/http-post/sso/703037"/>
    <SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:SOAP" Location="https://dnb-dev.onelogin.com/trust/saml2/soap/sso/703037"/>
  </IDPSSODescriptor>
</EntityDescriptor>