问题标签 [saml-2.0]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
x509certificate - 在 SP 中验证签名的 LogoutRequest
我正在实施 SAML2 单一注销协议。
我的身份提供者使用 HTTP-Redirect 绑定向我发送注销请求。此请求的内容如下所示:
?SAMLRequest=7b0HYBxJliUmL23Ke39K9UrX4HShCIBgEyTYkEAQ7MGIzeaS7B1pRyMpqyqBymVWZV1mFkDM7Z28995777333nvvvfe6O51OJ%2fff%2fz9cZmQBbPbOStrJniGAqsgfP358Hz8iHjfZolw9el5dVOv2Vf6L1nnTpmdPP%2fvo99%2bd3t%2b5f3BwsJ3t759v7x8c7G5nn%2b5Mth%2fe26f%2f7WXnDyaffpT%2bZF43RbX87KO98c5H6VnTrPOzZdNmy5Y%2b2tnd3cb%2f7r%2fZffBoZ%2ffR3sH44acHP%2fVR%2bpR6KZZZy2%2fO23bVPLp7dzUt2lne7O6Np3m9HE%2fnd4Hb3t3XL1%2bX1at8VtT5tL27yNvsuCyy5m6z%2big9qZZNjr7W9fJRlTVF82iZLfLmUTt99Pr4i%2bePCK1HU2n0aL1sVvm0OC%2fy2Ufpi6r9cvllfXze5nUP1U8F1V1C9d2iXDaPmEqbe1nVVVtNq%2fKjo8dMhlpe3fxS1jR5DTJ8dGTIYAZfVhfF8vFdgXX0%2bAW9e%2fY0fVbVi2zDeHfHu%2fxJMds%2b56aP8kVWlMezWZ03jQ7n1jiV66IZ19WsLi7W%2bQ%2fG54RatpzlP%2fg9FcnHdwWtI2Wj19QHvXhGbd4d%2ff47n%2b4d7O7dP99%2bcP7w%2fvb%2b3nS6nc0O8u3zWX7waZY%2f3JlM8sd3I2%2baDwOuPPp%2fAA%3d%3d&Signature=i1JxpKbaInBXsqTzPwG3E3NIPqCmK4mgLaYgUy%2fraNgscBBLLrQGObKm%2bLIu6Skh7iOb4r39HX6tCsq6p5CO97U7WfCwOnkJpgzAFjA0T9ByAzomh6LIC%2bpXGaINzhw2DPcv4cZYrUoSuEQl0OCaAAtYaarm%2f53qR0DMF5OhZkU%3d&SigAlg=http%3a%2f%2fwww.w3.org%2f2001%2f04%2fxmldsig-more%23rsa-sha256
按照OASIS 安全断言标记语言 (SAML) V2.0 的绑定,我将使用?SAMLRequest=value&SigAlg=value字符串并尝试使用Signature=value字符串进行验证。我正在使用的代码(JAVA)是这样的:
// Retrieve the public key sent by the IdP
FileInputStream inputStream = new FileInputStream("/path/to/the/idp/sent/public/key");
CertificateFactory cf = CertificateFactory.getInstance("X.509");
Certificate certificate = cf.generateCertificate(inputStream);
PublicKey publicKey = certificate.getPublicKey();
我总是收到错误签名的消息!!!
有任何想法吗?
saml-2.0 - 构造一个签名的 SAML2 LogOut 请求
我的目标是实现单一注销协议。首先,我了解标准的工作原理以及如何将其适应我的场景:ADFS 2.0 as IdP对我来说就像一个“黑匣子”
我现在正在做的是下一个:
发送
<AuthnRequest>
给我的 IdPIdP 要求我提供凭据,我提供它们并成功登录。
获取 SessionIndex 值并构造一个
<LogoutRequest>
<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_135ad2fd-b275-4428-b5d6-3ac3361c3a7f" Version="2.0" Destination="https://idphost/adfs/ls/" IssueInstant="2008-06-03T12:59:57Z"><saml:Issuer>myhost</saml:Issuer><NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress" NameQualifier="https://idphost/adfs/ls/">myemail@mydomain.com</NameID<samlp:SessionIndex>_0628125f-7f95-42cc-ad8e-fde86ae90bbe</samlp:SessionIndex></samlp:LogoutRequest>
取上面的
<LogoutRequest>
并在Base64中编码构造下一个字符串:
SAMLRequest=base64encodedRequest&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1
用上面的字符串生成签名
使用 base64 对签名进行编码
发送请求:
https://"https://idphost/adfs/ls/?SAMLRequest=base64encodedRequest&SigAlg=http%3A%2F%2Fwww.w3.org%2F2000%2F09%2Fxmldsig%23rsa-sha1&Signature=base64EncodedSignature
但是 IdP 正在回答我:SAML 消息签名的验证失败。
为了进行签名,我使用了我的私钥(2048 字节),并且为了验证 IdP 正在使用我的公钥(我在注册主机时发送的公钥)
签署请求的代码如下所示:
wcf - WCF 服务支持 SAML 2.0
我需要在 WCF 服务中传递 SAML 令牌 2.0(由 STS 服务颁发)。此 WCF 服务不使用 SAML 令牌,而只是将其传递给它正在调用的下一个服务。我该如何通过这个。因为我运行的是 Windows XP,所以我不能使用 WIF。
saml - 如何在 OpenSAML 中实现元数据提供程序/导出功能?
使用 OpenSAML,我想提供以下功能:(1) 将给定联合的元数据导出到文件,或 (2) 提供潜在联合伙伴可以访问的 URL,以获取联合的元数据。我已经为他们设置了。我知道这两个都可以完成,但是我找不到有关如何使用 OpenSAML 库执行此操作的文档或信息。
有人可以指出我正确的方向吗?
谢谢!
single-sign-on - PingFederate 单次注销 - 它是如何工作的?
鉴于:
- PingFederate 是一种单点登录 (SSO) 解决方案,它允许 1-n 应用程序使用单个用户名和密码对用户进行身份验证。
高级问题:
- PingFederate 的单次注销 (SLO) 功能如何工作?
- SLO 一般是如何工作的?
鉴于:
- 要开始 SLO 流程,我们希望用户从浏览器(即
https://[PingFederateInstance]/idp/startSLO.ping?PartnerSpId=[PartnerSpId]
)请求 SLO 端点。 - 我们可以假设 PingFederate 实例将在成功调用 SLO 后发出重定向。
具体问题:
- 但是,如果您在多个浏览器窗口中有多个应用程序怎么办?
- 联合身份提供者如何告诉多个应用程序终止它们的用户会话?
single-sign-on - PingFederate 单次注销:我的 IdP 仅发出一个 LogoutRequest
以@Scott T. 的回答为基础:
...PingFederate(充当 IdP)知道您在给定会话中与哪些 SP 联合。当用户启动 SLO(从您给出的示例 - 在 IdP - 它也可以从 SP 启动)时,用户浏览器(假设重定向或 POST 绑定)通过 SAML LogoutRequest 发送到每个 SP。
当我请求https://[PingFederateInstance]/idp/startSLO.ping?PartnerSpId=[PartnerSpId]
时,根据 server.log,PingFederate 只发出一个LogoutRequest。
我的问题:
- 如果我与多个 SP 联合,我应该如何配置 PingFederate 以便每个联合 SP 发出一个请求?
我倾向于相信:
- 我需要在这个屏幕上配置一些东西。
- 与多个 SP 注销请求“链接在一起”的想法一致,最后一个端点 URL 应该是 /idp/SLO.saml2。
single-sign-on - PingFederate SLO:没有为此适配器配置注销服务
在我调用单次注销 (SLO) 后,通过调用 'GET' on https://[PingFederate Server Instance]:[Port]/idp/startSLO.ping
,我的 PingFederate 服务器开始向我的 SP 注销服务发出请求。[我知道这一点是因为我可以看到它在 Fiddler 中发生。]
但在此过程中,它注意到我显然忘记为我的一个 SP 定义注销服务。
我的问题:
- 它指的是哪个SP?
- 如何解决此错误?
2011-11-25 21:40:16,923 WARN [org.sourceid.servlet.ErrorServlet] 顶级错误(ref#wprmxs):org.sourceid.saml20.adapter.AuthnAdapterException:已调用注销功能,但未配置注销服务这个适配器。 org.sourceid.websso.profiles.ProcessRuntimeException:org.sourceid.saml20.adapter.AuthnAdapterException:已调用注销功能,但未为此适配器配置注销服务。在 org.sourceid.websso.profiles.ResumableResponseHandlerBase.resume(ResumableResponseHandlerBase.java:50) 在 org.sourceid.saml20.profiles.idp.HandleLogoutResponse.doIt(HandleLogoutResponse.java:154) 在 org.sourceid.saml20.profiles.idp .HandleLogoutResponse.handleException(HandleLogoutResponse.java:80) 在 org.sourceid.websso.profiles.ResponseHandlerBase.process(ResponseHandlerBase.java:86) 在 org.sourceid.saml20.profiles.ProfileProcessManager.doHandleResponse(ProfileProcessManager.java:92) 在$ProfileProcessMgmtService_132f8e9ec21.doHandleResponse($ProfileProcessMgmtService_132f8e9ec21.java) 在 org.sourceid.websso。org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 的 parseNext(HttpParser.java:514) org.mortbay.jetty.bio 的 org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) .SocketConnector$Connection.run(SocketConnector.java:228) at com.pingidentity.appserver.jetty.DynamicSslSocketConnector$SslConnection.run(DynamicSslSocketConnector.java:637) at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java :450) 原因:org.sourceid.saml20.adapter.AuthnAdapterException:已调用注销功能,但未为此适配器配置注销服务。在 org.sourceid.saml20.profiles.idp.AdapterSupport.logoutAuthN(AdapterSupport.java:306) 在 org.sourceid.saml20.profiles 的 com.pingidentity.adapters.opentoken.IdpAuthnAdapter.logoutAuthN(IdpAuthnAdapter.java:270)。
single-sign-on - PingFederate SLO - 状态消息:无效签名
在我调用单点注销 (SLO) 后,通过在https://[PingFederate服务器实例]:[端口]/sp/startSLO.ping 上调用“GET”,我的 PingFederate 服务器开始向我的 SP 注销服务发出请求。[我知道这一点是因为我可以看到它在 Fiddler 中发生。]
但是,当我的一个 SP 调用“https://<PingFederate DNS>:XXXX” + request.getParameter(“resume”);
(根据@Scott T.'s answer here)时,我收到一条错误消息:
错误 - 单次注销不成功 响应状态:urn:oasis:names:tc:SAML:2.0:status:Requester 状态消息:无效签名 您的单次注销请求未成功完成。要退出您的身份提供者和每个服务提供者,请关闭所有浏览器窗口。合作伙伴:XXXX:IDP 目标资源:
http://<domain>/<default SLO endpoint>
我的问题:
- 此错误消息指的是什么?
- 如何解决此错误情况?
single-sign-on - PingFederate:SP SLO 与 IDP SLO - 真的很重要吗?
PingFederate 文档指出,您可以配置SP或IDP 单点注销(又名 SLO)。
当用户从他们的浏览器请求“Start-SLO”端点时,用户启动 SLO(即,要么 要么http://<PingFederate Base URL>/sp/startSSO.ping
)http://<PingFederate Base URL>/idp/startSSO.ping
。
我的问题:
- 这不只是名义上的区别吗?
- 归根结底,我们不只是针对端点吗?
- 这个选择对 SLO 流程有任何实质性影响吗?
@Scott T.这里有以下要说的:
如果用户在 IdP 启动 SLO 流程,则可以 - 作为最后一步,用户将被重定向回 /idp/SLO.saml2。事实上,您为注销而重定向到的每个 SP,都将重定向回 IdP 以注销下一个 SP。如果您从 SP 启动 SLO 流程,那么用户最终到达的最后一个位置是该 SP 的 SLO 端点。
事实上,如果 PingFederate 重定向到作为最后一步启动 SLO 的 SP 会很好,但这不是我的经验。
也许我还应该问:
- 您如何指定启动 SLO 的 SP?
编辑:根据@Scott T.'s answer here:
我在这里假设您将 PingFederate 作为 IdP 和 SP(可能有 2 个单独的安装)。
据我了解 IdP 和 SP 的定义:
- PingFederate既不是我的 IdP也不是我的 SP 之一。**
- 对于我的配置,PingFederate 只是促进了我的 IdP 和我的 SP之间的开放令牌传输。
- 直到最近,我还相信这是一个完全有效的配置。
- 但现在看来,这种配置不利于 SLO;或者至少与 PingFederate 充当我的 IdP 一样好。
- 它是否正确?
**当我这样说时,我的意思是说我有:
- 一个独立的 Web 应用程序,它对用户进行身份验证,并有一个包含用户名和密码的后备存储(即数据库)——这充当我的 IdP。
- 链接到我的 IdP 的多个独立 Web 应用程序显示数据并向我的用户提供功能 -这些充当我的 SP。
single-sign-on - PingFederate SLO:当我到达 SP 注销服务时,如何在令牌中接收更多属性?
正如预期的那样,当我启动单点注销 (SLO) 时,我会到达各种 SP 注销服务端点。
但是,我想从 opentoken 收到更多信息。
目前,我的 SP 在令牌中收到以下属性:
not-before
subject
not-on-or-after
renew-until
我的问题:
- 当我到达 SP 注销服务时,如何在令牌中接收更多属性?
编辑:根据@Scott T.的回答:
在 SLO 时访问这些属性意味着您的 opentoken 是在 cookie 中发送的,或者您在 SP 的应用程序会话中本地维护这些属性。
- 在我的配置中,我有 IdP 和 SP 适配器。
- 我已经在每个适配器的扩展契约中添加了属性。
- 那么为什么当我到达 IdP 适配器的注销服务并解析开放令牌时,我看到所有属性,包括扩展合同中的属性?
- 然而,当我到达任何SP 适配器注销服务时,我在解析的开放令牌中看不到任何扩展合同属性?
- IdP 适配器注销服务在这种方式中是否特别?