【问题标题】:How to generate saml 2.0 sso service metadata如何生成 saml 2.0 sso 服务元数据
【发布时间】:2015-06-11 13:54:59
【问题描述】:

过去我们已经创建了许多 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 的自定义实现。请帮忙。

【问题讨论】:

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


    【解决方案1】:

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

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

    做了很多这样的事情,我有点困惑。我从未与无法提供元数据的 IDP 打过交道!

    有 .NET 4.5 类 - System.IdentityModel.Metadata 可以做到这一点。

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

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

    【讨论】:

    • 我看到了文档。看起来它适用于 OAuth 和 OpenID Connect,而不是 saml。无论如何,我们作为 idp 发送给 ssp 的证书,我们如何生成该证书。有什么想法吗?
    • 不,Identityserver 肯定有 WS-Fed 元数据。证书是您用于令牌签名的证书。这可以是购买的 CA 证书或自签名证书。通常,元数据包含签名证书的公钥。
    • 好的。那么我如何生成这里指定的元数据文件:en.wikipedia.org/wiki/SAML_2.0#SSO_Service_Metadata
    • 最简单的就是手工制作 - 它只是 XML。您必须决定什么绑定等。您说您过去已经完成了许多 SAML 实现。将 Firefox 与 SAML Tracer 插件一起使用,看看您当前的元数据示例是什么样的。
    【解决方案2】:

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

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

    元数据是一个简单的 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>
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多