C# 如何生成SAML2.0 sso服务元数据

C# 如何生成SAML2.0 sso服务元数据,c#,asp.net,saml,saml-2.0,C#,Asp.net,Saml,Saml 2.0,我们在过去创建了许多SAML实现。通常,客户机会向我们发送包含密钥信息、用户信息、证书等的SAML XML数据,我们会解析这些信息,匹配密钥和证书。从xml中获取用户的唯一标识符,然后根据用户是否在我们的数据库中进行身份验证,并将登录的用户发送到我们域的某个页面。(我想问第二个问题:这是否意味着我们是Saml身份提供者还是服务提供者) 无论如何,现在这个特定的客户机要求我们向他们发送SAML SSO元数据文件。他们说,为了将联盟从他们的环境部署到我们的环境中,他们需要一个SAML SSO服务元数

我们在过去创建了许多SAML实现。通常,客户机会向我们发送包含密钥信息、用户信息、证书等的SAML XML数据,我们会解析这些信息,匹配密钥和证书。从xml中获取用户的唯一标识符,然后根据用户是否在我们的数据库中进行身份验证,并将登录的用户发送到我们域的某个页面。(我想问第二个问题:这是否意味着我们是Saml身份提供者还是服务提供者)

无论如何,现在这个特定的客户机要求我们向他们发送SAML SSO元数据文件。他们说,为了将联盟从他们的环境部署到我们的环境中,他们需要一个SAML SSO服务元数据的副本,如下所述


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

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

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

做了很多这些,我有点困惑。我从未遇到过无法提供元数据的IDP

有.NET 4.5类-System.IdentityModel.Metadata来执行此操作

请看一下在中生成元数据的开放源代码


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

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

您可以从以下位置生成SAML Idp元数据:

您可以在此处生成SAML SP元数据表单:

元数据是一个简单的xml文件,它描述了组织的详细信息,如名称、显示名称、技术联系人详细信息、用于签名的公钥、用于加密的公钥等

以下是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>

MIIELDCCAxSgAwIBAgIUa0r3l1uIkdnRLn5tmlWFHhQ9b5IwDQYJKoZIhvcNAQEF
Bkawxzelmaka1uebHMCVVMxfzavbgnvbaomdlrllc3qgt25liexvz2lumruwewyd
VQLDAXPBMVB2DPBIBJZFAXIDAEBGNVBAMF09UZUXVZ2LUIEFJY291BNQGMTE0
MTM0MB4XDTE3MDKXMZA3MJGZNVOXDTIYMDKXNDA3MJGZNVOWDXZELMAKGA1EBHMC
VVMXFZAVBGNVBAOMDLRLC3QGT25LIEXVZ2LUMRUWEWYDVQLDAXPBMVMB2DPBIBJ
ZFAxIDAeBgNVBAMMF09uZUxvZ2luIEFjY291bnQgMTE0MTM0MIIBIjANBgkqhkiG
9W0BAQEFAOCAQ8AMiIBCGKCAQEAYBMJI6L2E/j02P9alspmrKZATV5xQeJ//qp2
Zm+9Q52PQ7HTY6IJYKJUGFZX9AXSI80EZ59RXGENZSIG5QTLIL890KTYV/iPwBN
Nv3K22A8LXtX2R+JF96BRBCDSSKBMWFZRVW6SPDWVN8BxFMIP9QDRED6KZGDISZ
YKKH7YLMNLX6CSGJ9KBUVR5E9KDS+xoBdqGoeEFbqVsjKupm4MDrQp5S47b8lQ
TWMCVI2LBZHHVHCFGDLAZ2P1EFHHYT8KLPI+aiyA6lRbZjtdgZT1IxzN1DcF+f
JLRR5MQWNBDVNG5C4BOKRR4FLIEKJAZ5A5WP37Q7PNGE4J2WIDAQABO4FMIHC
MAwGA1UdEwEB/wQCMAAwHQYDVR0OBBYEFO3qhBXpJjAq4QE5MTOQM9Qdg+UNMIGc
BgNVHSMEgZQwgZGAFO3qhBXpJjAq4QE5MTOQM9Qdg+UNOWOKYTBFMQSWCQYDVQG
EWVuzexmbuga1UECGWOVgVzDCBpMugtg9NAW4xFTTBGNVbasmde9UzuxVz2LU
IElkUDEgMB4GA1UEAwwXT25lTG9naW4gQWNjb3VudCAxMTQxMzSCFGtK95dbiJHZ
0S5+bZpVhR4UPW+SMA4GA1UdDwEB/wQEAwIHgDANBgkqhkiG9w0BAQUFAAOCAQEA
VxYDLUW8T22GADKLDD1CGVDDVKZWUG1UxLNS0BYENQZXZIPK5DW/D8CFLqt3v
KW99KRZBRFCDKWxVPTQB+Rd9l/EY4CQAZKC8XDR/alJoHwFX6ROB9QcNUDgu2
ACZ2Mvsy6tRHt2a4JYdy2WImLptVeoO+NaNgKJzohbuBzvaqwqLWmn421g6v5iuy
SYNPBGIO5SOZPUS3ULFETEQGFRNBBOPRBDPVCDSI2BBJW9XKQU2KEHX2J5AMYTR
qRdV0lH8BS57/SG0EWCathG8CdZi7TcoZtNiHDT+EVKIIXPZUEYJNWTDe7i
96e8+UD2AXCW1YLW7VXMA==
urn:oasis:names:tc:SAML:1.1:nameid格式:emailAddress

我看到了文档。看起来它适用于OAuth和OpenID Connect,而不是saml。无论如何,我们作为idp发送给ssp的证书,我们如何生成该证书。知道吗?不,Identityserver肯定有WS-Fed元数据。证书是用于令牌签名的证书。这可以是购买的CA证书,也可以是自签名证书。通常,元数据包含签名证书的公钥。确定。那么,我如何生成此处所述的元数据文件:最简单的方法就是手工制作——它只是XML。您必须决定什么绑定等。您说您在过去已经完成了许多SAML实现。将Firefox与SAML Tracer插件一起使用,查看当前元数据示例的外观。