SAML 2.0:如何配置断言使用者服务URL

时间:2014-03-28 01:26:28

标签: single-sign-on saml

我正在实施一个使用Okta作为身份提供商的SAML 2.0服务提供商。我想配置断言使用者服务(ACS)URL,以便我的服务提供者应用程序中的SAML 2.0反映在断言中。

但是,我注意到Okta身份提供程序改为发送在Okta配置中配置的SSO端点,并忽略实际发送的ACS。另外,我得到一个错误,也许SP中的ACS与那里的元数据不匹配。

如果ACS URL不是向IDP发送短ID以使其反映在断言中的正确方法,那么可以使用其他机制来实现此目的。

示例:

SP应用发送的SAML 2.0 SAMLRequest是:

assertion_consumer_service_url: https://host.com:port/saml/consume? ENTITYID = N&安培; MYNAME =用户名

Identity Provider上的配置具有元数据:

单点登录网址: https://host.com:port/saml/consume?entityId=N

请注意,myName会从一个请求更改为下一个请求,因为这是我们验证响应的name_id与发送的原始用户名相匹配的方法。

此外,如果服务提供商有办法让身份提供商断言SP管理的名称(例如用户名),那么这对我们的需求就可以了。如何指定这个?

由于

2 个答案:

答案 0 :(得分:13)

在SAML中,假定ACS对于SP是静态的。要将Response与原始AuthnRequest相关联,您应该保存传出的AuthnRequest的ID,然后使用收到的响应的InResponseTo

SP可以向AuthnRequest添加主题,告诉IdP您要通过哪个用户名进行身份验证。它在SAML2 Core spec中的3.4.1节中定义。

答案 1 :(得分:0)

正如Anders Abel指出的那样,ACS被认为是静态的。但是,在开发环境中,可能有必要对不同的测试系统做出更动态的响应。

这是我的saml20-sp-remote.php,我使用它的请求的属性AssertionConsumerService来响应每个请求SSO身份验证的SP。 我猜这对于生产来说是不安全的。

simplesamlphp / metadata / saml20-sp-remote.php:

<?php
/**
 * SAML 2.0 remote SP metadata for SimpleSAMLphp.
 *
 * See: https://simplesamlphp.org/docs/stable/simplesamlphp-reference-sp-remote
 */
$acs = \SAML2\Binding::getCurrentBinding()->receive()->getAssertionConsumerServiceURL();
if (!$acs) $acs = 'some_fallback_url';

$metadata['idp_identifier'] = array(
    'AssertionConsumerService' => $acs,
    'simplesaml.nameidattribute' => 'uid'
);