标签: saml

136
推荐指数
4
解决办法
6万
查看次数

SAML:为什么签名中的证书?

我必须为我公司的网站(作为依赖方)使用SAML实施SSO.当然,一个重要的部分是验证签名.以下是我们合作伙伴公司(断言方)的SAML样本的签名部分:

<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
 <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
  <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
  <ds:Reference URI="#_2152811999472b94a0e9644dbc932cc3" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
   <ds:Transforms xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
    <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
    <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
     <ec:InclusiveNamespaces PrefixList="ds saml samlp xs" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/>
    </ds:Transform>
   </ds:Transforms>
   <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"/>
   <ds:DigestValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">bW1Os7+WykqRt5h0mdv9o3ZF0JI=</ds:DigestValue>
  </ds:Reference>
 </ds:SignedInfo>
 <ds:SignatureValue xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
cgrAN4T/UmobhrkkTi3miiRfbo0Z7aakSZjXuTWlZlu9jDptxPNbOFw8ZbYKZYyuW544wQqgqpnG
gr5GBWILSngURjf2N45/GDv7HMrv/NRMsRMrgVfFsKbcAovQdLAs24O0Q9CH5UdADai1QtDro3jx
nl4x7HaWIo9F8Gp/H1c=
 </ds:SignatureValue>
 <ds:KeyInfo>
  <ds:X509Data>
   <ds:X509Certificate>MIIElzCCA3+gAwIBAgIQNT2i6HKJtCXFUFRB8qYsZjANBgkqhkiG9w0BAQUFADB3MQswCQYDVQQG
    EwJGUjEOMAwGA1UEBxMFUGFyaXMxDDAKBgNVBAoTA3BzYTEgMB4GA1UECxMXY2VydGlmaWNhdGUg
    YXV0aG9yaXRpZXMxKDAmBgNVBAMTH0FDIFBTQSBQZXVnZW90IENpdHJvZW4gUHJvZ3JhbXMwHhcN
    MDkwODE5MDcxNTE4WhcNMTEwODE5MDcxNTE5WjCBhjELMAkGA1UEBhMCZnIxHzAdBgkqhkiG9w0B
    CQEWEHBhc3NleHRAbXBzYS5jb20xGDAWBgoJkiaJk/IsZAEBEwhtZGVtb2IwMDEMMAoGA1UEChMD
    cHNhMREwDwYDVQQLEwhwcm9ncmFtczEbMBkGA1UEAxMSVGVzdCAtIFBBU1NFWFQgREVWMIGfMA0G
    CSqGSIb3DQEBAQUAA4GNADCBiQKBgQCuY1nrepgACvDSTLWk5A1cFOJSwDbl6CWfYp3cNYR0K3YV
    e07MDZn+Rv4jo3SusHVFds+mzKX2f8AeZjkA3Me/0yiS9UpS9LQZu9mnhFlZRhmUlDDoIZxovLXN
    aOv/YHmPeTQMQmJZu5TjqraUq7La1c187AoJuNfpxt227N1vOQIDAQABo4IBkTCCAY0wDgYDVR0P
    AQH/BAQDAgWgMB8GA1UdIwQYMBaAFLceWtTfVeRuVCTDQWkmwO4U01X/MAwGA1UdEwEB/wQCMAAw
    gbYGA1UdIASBrjCBqzCBqAYKKoF6ARfOEAEBBDCBmTBBBggrBgEFBQcCARY1aHR0cDovL3JldW5p
    cy5pbmV0cHNhLmNvbS9hdXRvcml0ZS9QQy1BQy1Qcm9ncmFtcy5wZGYwVAYIKwYBBQUHAgIwSDAK
    FgNwc2EwAwIBARo6UG9saXRpcXVlIGRlIENlcnRpZmljYXRpb24gQUMgUFNBIFBldWdlb3QgQ2l0
    cm9lbiBQcm9ncmFtczBcBgNVHR8EVTBTMFGgT6BNhktodHRwOi8vaW5mb2NlcnQucHNhLXBldWdl
    b3QtY2l0cm9lbi5jb20vQUMtUFNBLVBldWdlb3QtQ2l0cm9lbi1Qcm9ncmFtcy5jcmwwHQYDVR0l
    BBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBYGA1UdDgQPBA1BVVRPX0dFTkVSQVRFMA0GCSqGSIb3
    DQEBBQUAA4IBAQCvRtP6bFkOUEHcqc6yUX0Q1Gk2WaAcx4ziUB0tw2GR9I0276JRJR0EGuJ/N6Fn
    3FhLQrSPmS97Xvc9XmiI66fQUdg64g9YqBecdiQlUkR20VLgI6Nq8pldQlWjU2iYlkP15U7VF4Qr
    0Pb2QiIljZUCKdv3qdED2Ri33za46LfykrlwZB0uhTVUxI/AEtjkKVFaZaqanJg+vJyZI5b30z7g
    Ff8L3ht4Z7SFKdmY3IQSGzElIAAUfduzTJX0cwnGSU9D4BJu1BS8hWnYPwhk+nBJ7OFhXdwYQFWq
    fhpBLq+ciJti9OMhcdCSIi0PbrOqzqtX7hZUQOvfShhCTJnl5TJJ</ds:X509Certificate>
  </ds:X509Data>
 </ds:KeyInfo>
</ds:Signature>
Run Code Online (Sandbox Code Playgroud)

我不明白的是,为什么签名内的证书?

我的意思是通常我会以安全的方式从公司获得证书,所以我知道证书来自他们.当签名验证成功时,我知道我们的合作伙伴公司已签署.

但是当证书在SAML-Response的签名范围内时,任何人都可以发送它!我唯一知道的是答案没有被证伪.但重点是,我不知道谁发送了SAML.

任何人都可以向我解释,这是如何工作的?

certificate signature saml

97
推荐指数
3
解决办法
8万
查看次数

SAML与OAuth的联合登录

SAML与OAuth联合登录有什么区别?如果公司想要使用第三方Web应用程序,并且还希望单点登录并成为身份验证机构,那么哪种解决方案更有意义?

authentication oauth saml

96
推荐指数
3
解决办法
6万
查看次数

如何成为SAML服务提供商

大家早上好,

我公司目前正在开发Java Web应用程序.我们的几个客户有内部SAML服务器(身份提供商?),并要求我们与他们集成.所以最近我一直在阅读它并与OpenAM一起玩.大约3天后,我对它有一个大致的了解,但我的知识仍然存在一些差距.我希望有人可以为我解决这个问题.

所以这就是我如何想象用户登录的工作流程.

让我们将客户SAML服务器定义为https://their.samlserver.com.因此,用户访问我们的Web应用程序以获取受保护的资源.假设网址是http://my.app.com/something.

所以,如果我是正确的,my.app.com就是SAML定义为服务提供商的东西.我们的应用程序意识到该用户需要登录.然后我们向用户呈现这样的页面......

<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
    <input type="hidden" name="SAMLRequest" value="someBase64Data" />
    <input type="submit" value="Submit" />
</form>
Run Code Online (Sandbox Code Playgroud)

someBase64Data应该是base64这个编码版本...

<samlp:AuthnRequest
  xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
  xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
  ID="identifier_1"
  Version="2.0"
  IssueInstant="2004-12-05T09:21:59Z"
  AssertionConsumerServiceIndex="0">
 <saml:Issuer>http://my.app.com</saml:Issuer>
 <samlp:NameIDPolicy
   AllowCreate="true"
   Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>
Run Code Online (Sandbox Code Playgroud)

所以我的第一对问题.

假设的ID值是多少?

为什么我可以宣布自己为发行人

身份提供商是否了解我?也许这就是信任圈

我一直在看OpenAM.如果它确实了解我,它如何了解我以及它需要知道什么?

因此,在用户转发该页面后,他们将被带到IDP https://their.samlserver.com提供的页面.他们在该页面上进行身份验证,IDP可以验证身份验证并查找用户.身份验证成功后,IDP会在此处发送回<samlp:Response>定义的内容.

还有一些问题.

首先,如何<samlp:Response>返回我的Web应用程序以便检查它?

我应该在该回复中寻找什么来验证它是否成功?失败是什么样的?

我们目前使用电子邮件地址(LDAP)来识别用户,因此我们可能会从响应中获取并以与我们现在相同的方式使用它.还有什么我应该注意的回应?

所以现在我们已经检查了有效性的响应,我们可以向用户授予像我们当前那样的会话.但是当他们想要注销时,是否有工作流程?我是否必须通知IDP该用户已离开?

最后,在我的阅读中有几个主题被抛出,我不确定它们如何适应这个工作流程.它们是 …

security authentication saml

79
推荐指数
1
解决办法
4万
查看次数

如何从文件加载RSA私钥

我正在研究SAML 1.1断言消费者服务的测试工具.测试必须生成签名的SAMLResponse并将其提交给Base64中编码的ACS.ACS必须能够使用X509公共证书验证签名的消息.

我能够构建SAMLResponse,添加必要的断言等.但是当我尝试签署对象时,我遇到了问题.这是我当前代码的片段:

String certPath = "mycert.pem";
File pubCertFile = new File(certPath);
BufferedInputStream bis = null;
try {
    bis = new BufferedInputStream(new FileInputStream(pubCertFile));
} catch(FileNotFoundException e) {
    throw new Exception("Could not locate certfile at '" + certPath + "'", e);
}
CertificateFactory certFact = null;
Certificate cert = null;
try {
    certFact = CertificateFactory.getInstance("X.509");
    cert = certFact.generateCertificate(bis);
} catch(CertificateException e) {
    throw new Exception("Could not instantiate cert", e);
}
bis.close();
ArrayList<Certificate> certs = new ArrayList<Certificate>();
certs.add(cert);

String keyPath = "mykey.pem"; …
Run Code Online (Sandbox Code Playgroud)

java rsa saml

59
推荐指数
2
解决办法
10万
查看次数

公共SAML v2服务提供商进行测试?

我想知道是否有任何公开可用的SAML v2 SP可用于测试.

我认为Salesforce和Google应用程序都有一个兼容的SSO解决方案,但我只是不确定如何获取访问权限(并且不清楚它是否成本.)

也许我应该在另一个盒子上设置SP(使用OpenSSO或其他东西)?提前致谢.

testing saml single-sign-on service-provider

54
推荐指数
5
解决办法
5万
查看次数

ADFS,WIF,WS Federation,SAML和STS之间有什么区别?

这些是用于Microsoft服务单点登录的众多技术和流行语.

有人可以解释ADFS,WIF,WS联合,SAML和STS(安全令牌服务),包括每个使用的位置和时间.

adfs saml wif single-sign-on ws-federation

53
推荐指数
2
解决办法
5万
查看次数

用于什么不同的NameID格式?

在SAML元数据文件中,定义了几种NameID格式,例如:

<NameIDFormat>urn:mace:shibboleth:1.0:nameIdentifier</NameIDFormat>

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

<NameIDFormat>urn:oasis:names:tc:SAML:2.0:nameid-format:transient</NameIDFormat>
Run Code Online (Sandbox Code Playgroud)

谁能解释一下这些用途是什么?有什么区别?

saml single-sign-on opensaml

52
推荐指数
3
解决办法
9万
查看次数

CAS与SAML与OAuth2相比

在你没有做任何作业的情况下让我问过于基本的问题之前,我想说我一直在做很多关于这些主题的阅读,但我仍然感到困惑.

我的需求似乎很简单.在我的公司,我们有一堆Ruby on Rails应用程序.我想构建一个所有这些应用程序都应该使用的SSO身份验证服务.

我试着做一些关于如何做到这一点的研究CAS,SAML并且阅读了OAuth2.(我知道OAuth中的"Auth"代表授权,而不是身份验证,但我阅读了足够多的文章,说明如何使用OAuth进行身份验证 - 就是其中之一.)

有人能用简单的语言告诉我这三个是什么吗?他们是替代品(竞争)吗?比较它们甚至是正确的吗?

而且有很多宝石似乎都在说非常相似的东西:

我只想要一个单独的Rails应用程序来处理我的其他Rails应用程序的所有身份验证.

注意:我不想让用户使用他们的Google/Facebook帐户登录.我们的用户已在我们的网站上拥有帐户.我希望他们能够使用该帐户登录一次,并且无需再次登录即可访问我们的所有应用程序.在任何应用中注销都应该在所有应用中签名.

UPDATE

我遇到过这两个OAuth解决方案:

他们似乎在描述与我想要的非常相似的东西.但我还没有找到任何指南/博客文章/教程,展示如何使用SAML/CAS执行此操作.

建议欢迎.

更新2

关于我们用例的更多细节.

我们没有任何现有的SAML架构.主要是我们的用户(直接在我们的网站上注册)将访问我们的所有应用程序.将来,我们可能会有第三方(合作伙伴)公司调用我们的API.我们也可能有来自这些第三方(合作伙伴)公司(在其网站上注册)访问我们的应用程序的用户.

cas ruby-on-rails saml single-sign-on oauth-2.0

50
推荐指数
3
解决办法
2万
查看次数

什么是SSO(例如SAML)中使用的RelayState参数?

我正在尝试使用SAML了解SSO.我遇到了RelayState参数,并且非常混淆为什么它首先在SSO中发送编码的URL?究竟是什么意思?

请阅读Google Developer文档中的以下内容:

Google会生成SAML身份验证请求.SAML请求已编码并嵌入到合作伙伴的SSO服务的URL中.包含用户尝试访问的Google应用程序的编码URL的RelayState参数也嵌入在SSO URL中.此RelayState参数是一个不透明的标识符,无需任何修改或检查即可传回

saml single-sign-on saml-2.0

47
推荐指数
3
解决办法
5万
查看次数