simpleSAMLphp 和 Azure 给了我 "AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application"
simpleSAMLphp and Azure gives me "AADSTS50011: The reply URL specified in the request does not match the reply URLs configured for the application"
我是 Azure SSO 的新手,所以我可能在这里遗漏了一些明显的东西 - 请记住这一点 ;-)
我需要将我的应用程序集成到 Azure Active Directory。在我们的组织中没有太多帮助,所以我只能自己在这里找到问题:-/我的确切问题是,当我登录时,我从 Azure 收到此错误:
AADSTS50011: The reply URL specified in the request does not match the
reply URLs configured for the application: 'https://192.168.0.1/secure/'.
我当然自己搜索了如何解决这个问题,但我没有找到任何可以让我更接近的东西。
我有这个设置:
- IIS
- PHP
- 简单SAMLphp
- Azure 广告
我没有设置也无法访问 Azure 部分,因为这是由我们的 IT 人员设置的,但他们已经设置了:
Basic SAML Configuration
Identifier (Entity ID) : https://192.168.0.1/secure/
Reply URL (Assertion Consumer Service URL) : https://192.168.0.1/secure/
Sign on URL : Optional
Relay State : Optional
Logout URL : Optional
我从 Azure 收到了一个联合 XML 文件,并且 converted/populated 将其放入 simpleSAMLphp 文件 \metadata\saml20-idp-remote.php
我已经设置了 \config\authsources.php 文件:
'entityID' => "https://192.168.0.1/secure/",
'idp' => "https://sts.windows.net/06dg12k9-1wl2-4mue-79gh-40ff1a8dnd4a/",
'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
'simplesaml.nameidattribute' => 'eduPersonTargetedID',
一切都已根据本指南进行配置,https://www.lewisroberts.com/2015/09/05/single-sign-on-to-azure-ad-using-simplesamlphp/
当我启动 https://192.168.0.1/simpleSAMLphp/www/ 并转到 Authentication 和 Test configured authentication sources 并且我使用 [=78= 进行测试]default-sp 然后我会得到一个 Azure 登录屏幕。如果我为此查看 URL,那么它看起来像这样:
https://login.microsoftonline.com/0ad94219-6af5-474e-99d0-60f9188f3fce/saml2
?SAMLRequest=f[CUT]2Fy%2Fi%2Bjc%3D
&RelayState=https%3A%2F%2F192.168.0.1%2FsimpleSAMLphp%2Fwww%2Fmodule.php%2Fcore%2Fauthenticate.php%3Fas%3Ddefault-sp
我假设 RelayState 是请求来自我的服务器的地方。我尝试将 Azure 中的 Entity ID 和 Reply URL 设置为 https://192.168.0.1/simpleSAMLphp/www/module.php/core/authenticate.php?as=default-sp,但结果相同。
所以我在这里提供了我所知道的一切,但我真的不知道如何解决这个问题?我是否需要在 simpleSAMLphp 中配置 Reply URL 以便它作为 URL 参数传递?
任何帮助将不胜感激。
### 更新 1 - 另一个问题###
从 simpleSAMLphp 修改日志文件后,它显示了发送到 Azure 的内容:
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_25e3fb2" Version="2.0" Destination="https://login.microsoftonline.com/088f3fce/saml2" AssertionConsumerServiceURL="https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp</saml:Issuer>
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/>
</samlp:AuthnRequest>
然后我从那里获取 AssertionConsumerServiceURL
并在 Azure 中将其用作 回复 URL。我还从 simpleSAMLphp 联合页面获取了 实体 ID 并且 现在 simpleSAMLphp 演示页面有效 :- )
所以我的 Azure 设置现在看起来像这样:
基本 SAML 配置
Identifier (Entity ID) : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp
Reply URL (Assertion Consumer Service URL) : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp
Sign on URL : Optional
Relay State : Optional
Logout URL : Optional
(注意URL中的区别)
然而遗憾的是我仍然有问题。当我的网络范围内有一个 PHP 文件时,内容如下:
<?PHP
require_once ("../../simpleSAMLphp/lib/_autoload.php");
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();
$attributes = $as->getAttributes();
echo '<pre>';
print_r($attributes);
echo '</pre>';
// Get a logout URL
$url = $as->getLogoutURL();
echo '<a href="' . htmlspecialchars($url) . '">Logout</a>';
?>
然后它以 无限循环 在我的服务器和 Azure 之间重定向结束!?查看日志对我没有任何重要的见解。似乎我确实从 Azure 接收到数据并且我通过了身份验证,因为我可以在调试日志中看到用户属性但是......如果我通过了身份验证那么为什么我会被重定向回 Azure!?
### 更新 2 - 解决方案###
在查看 simpleSAMLphp 日志文件并清除警告(它们实际上很重要)几个小时后,我发现我的无限重定向是由 [=123] 之间的不匹配引起的=] 会话和 simpleSAMLphp 会话。
我的解决方案是将两者对齐并在所有位置使用完全相同的设置。确保检查 php.ini
会话设置和 \config\config.php
会话设置并使它们相同。
我还发现我使用的 PHP 源代码是针对旧版本的 simpleSAMLphp,但我认为这不是问题。
代替这个旧方法:
$as = new SimpleSAML_Auth_Simple('default-sp');
那么应该是这个新方法:
$as = new \SimpleSAML\Auth\Simple('default-sp');
RelayState
只是一个按原样回显给您的 SP 的参数。例如,它可用于存储用户在身份验证之前尝试访问的页面url。
如果您使用 SAML2
,回复 URL 应该是您在 SP 元数据中的 AssertionConsumerService
url。 Azure 会将 SAML
Response
发送到那里。如果 url 与 https://192.168.0.1/secure/
不同,您将收到该错误。即使缺少尾随 /
也会导致错误。
我是 Azure SSO 的新手,所以我可能在这里遗漏了一些明显的东西 - 请记住这一点 ;-)
我需要将我的应用程序集成到 Azure Active Directory。在我们的组织中没有太多帮助,所以我只能自己在这里找到问题:-/我的确切问题是,当我登录时,我从 Azure 收到此错误:
AADSTS50011: The reply URL specified in the request does not match the
reply URLs configured for the application: 'https://192.168.0.1/secure/'.
我当然自己搜索了如何解决这个问题,但我没有找到任何可以让我更接近的东西。
我有这个设置:
- IIS
- PHP
- 简单SAMLphp
- Azure 广告
我没有设置也无法访问 Azure 部分,因为这是由我们的 IT 人员设置的,但他们已经设置了:
Basic SAML Configuration
Identifier (Entity ID) : https://192.168.0.1/secure/
Reply URL (Assertion Consumer Service URL) : https://192.168.0.1/secure/
Sign on URL : Optional
Relay State : Optional
Logout URL : Optional
我从 Azure 收到了一个联合 XML 文件,并且 converted/populated 将其放入 simpleSAMLphp 文件 \metadata\saml20-idp-remote.php
我已经设置了 \config\authsources.php 文件:
'entityID' => "https://192.168.0.1/secure/",
'idp' => "https://sts.windows.net/06dg12k9-1wl2-4mue-79gh-40ff1a8dnd4a/",
'NameIDFormat' => 'urn:oasis:names:tc:SAML:2.0:nameid-format:persistent',
'simplesaml.nameidattribute' => 'eduPersonTargetedID',
一切都已根据本指南进行配置,https://www.lewisroberts.com/2015/09/05/single-sign-on-to-azure-ad-using-simplesamlphp/
当我启动 https://192.168.0.1/simpleSAMLphp/www/ 并转到 Authentication 和 Test configured authentication sources 并且我使用 [=78= 进行测试]default-sp 然后我会得到一个 Azure 登录屏幕。如果我为此查看 URL,那么它看起来像这样:
https://login.microsoftonline.com/0ad94219-6af5-474e-99d0-60f9188f3fce/saml2
?SAMLRequest=f[CUT]2Fy%2Fi%2Bjc%3D
&RelayState=https%3A%2F%2F192.168.0.1%2FsimpleSAMLphp%2Fwww%2Fmodule.php%2Fcore%2Fauthenticate.php%3Fas%3Ddefault-sp
我假设 RelayState 是请求来自我的服务器的地方。我尝试将 Azure 中的 Entity ID 和 Reply URL 设置为 https://192.168.0.1/simpleSAMLphp/www/module.php/core/authenticate.php?as=default-sp,但结果相同。
所以我在这里提供了我所知道的一切,但我真的不知道如何解决这个问题?我是否需要在 simpleSAMLphp 中配置 Reply URL 以便它作为 URL 参数传递?
任何帮助将不胜感激。
### 更新 1 - 另一个问题###
从 simpleSAMLphp 修改日志文件后,它显示了发送到 Azure 的内容:
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_25e3fb2" Version="2.0" Destination="https://login.microsoftonline.com/088f3fce/saml2" AssertionConsumerServiceURL="https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST">
<saml:Issuer>https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp</saml:Issuer>
<samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient" AllowCreate="true"/>
</samlp:AuthnRequest>
然后我从那里获取 AssertionConsumerServiceURL
并在 Azure 中将其用作 回复 URL。我还从 simpleSAMLphp 联合页面获取了 实体 ID 并且 现在 simpleSAMLphp 演示页面有效 :- )
所以我的 Azure 设置现在看起来像这样:
基本 SAML 配置
Identifier (Entity ID) : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/metadata.php/default-sp
Reply URL (Assertion Consumer Service URL) : https://192.168.0.1/simpleSAMLphp/www/module.php/saml/sp/saml2-acs.php/default-sp
Sign on URL : Optional
Relay State : Optional
Logout URL : Optional
(注意URL中的区别)
然而遗憾的是我仍然有问题。当我的网络范围内有一个 PHP 文件时,内容如下:
<?PHP
require_once ("../../simpleSAMLphp/lib/_autoload.php");
$as = new SimpleSAML_Auth_Simple('default-sp');
$as->requireAuth();
$attributes = $as->getAttributes();
echo '<pre>';
print_r($attributes);
echo '</pre>';
// Get a logout URL
$url = $as->getLogoutURL();
echo '<a href="' . htmlspecialchars($url) . '">Logout</a>';
?>
然后它以 无限循环 在我的服务器和 Azure 之间重定向结束!?查看日志对我没有任何重要的见解。似乎我确实从 Azure 接收到数据并且我通过了身份验证,因为我可以在调试日志中看到用户属性但是......如果我通过了身份验证那么为什么我会被重定向回 Azure!?
### 更新 2 - 解决方案###
在查看 simpleSAMLphp 日志文件并清除警告(它们实际上很重要)几个小时后,我发现我的无限重定向是由 [=123] 之间的不匹配引起的=] 会话和 simpleSAMLphp 会话。
我的解决方案是将两者对齐并在所有位置使用完全相同的设置。确保检查 php.ini
会话设置和 \config\config.php
会话设置并使它们相同。
我还发现我使用的 PHP 源代码是针对旧版本的 simpleSAMLphp,但我认为这不是问题。
代替这个旧方法:
$as = new SimpleSAML_Auth_Simple('default-sp');
那么应该是这个新方法:
$as = new \SimpleSAML\Auth\Simple('default-sp');
RelayState
只是一个按原样回显给您的 SP 的参数。例如,它可用于存储用户在身份验证之前尝试访问的页面url。
如果您使用 SAML2
,回复 URL 应该是您在 SP 元数据中的 AssertionConsumerService
url。 Azure 会将 SAML
Response
发送到那里。如果 url 与 https://192.168.0.1/secure/
不同,您将收到该错误。即使缺少尾随 /
也会导致错误。