2

我是 SAML 协议的新手,我需要使用与本地用户数据库连接的 SimpleSamlPHP 创建一个 IdP。然后我必须在asp.net web forms/mvc(最好是asp.net mvc)中创建一个SP。我设法将 SimpleSamlPHP 设置为 IdP,并使用默认的 saml-sql 身份验证源/登录页面连接到本地用户数据库。正如所见:

在此处输入图像描述

用户登录后,将返回默认的 SimpleSAMLPhp 消费者页面。正如所见: 在此处输入图像描述

我注意到登录 url 包含具有重定向 URL 的 AuthnState。因此: http://localhost:8080/simplesaml/module.php/core/loginuserpass.php?AuthState=_6ecd0987b485b771d67a5ddbd62ca4b22913a12fb6%3Ahttp%3A%2F%2Flocalhost%3A8080%2Fsimplesaml%2Fmodule.php%2Fcore%2Fas_login.php%3FAuthId %3Dsaml-sql%26ReturnTo%3Dhttp%253A%252F%252Flocalhost%253A8080%252Fsimplesaml%252Fmodule.php%252Fcore%252Fauthenticate.php%253Fas%253Dsaml-sql

其中: ReturnTo%3Dhttp%253A%252F%252Flocalhost%253A8080%252Fsimplesaml%252Fmodule.php%252Fcore%252Fauthenticate.php%253Fas%253Dsaml-sql

大概是指定返回 url 的地方,并且 authnstate 是由 SimpleSAMPPhp 动态生成的。

有了这个,我需要创建一个 asp.net webform/MVC(最好是 asp.net mvc)项目,该项目将是一个 SP,将用户重定向到 simpleSAMLPhp 登录页面页面,并且还将指定在 AuthnState 参数中找到的所有参数包括重定向到 asp.net 项目的消费者页面。我通过互联网搜索,发现 WIF 不支持 SAML 协议并找到其他框架/库进行测试。我目前正在尝试实施 OneLogin 以创建一个 asp.net SP @ https://onelogin.zendesk.com/hc/en-us/articles/201175694-SAML-Toolkit-for-C-and-ASP-NET并遵循页面中描述的说明。我做了以下事情:

  1. 更改 AccountSettings.certificate 中的配置以匹配 SimpleSamlPhp 中的 IdP 元数据证书
  2. 将 AccountSettings.idp_sso_target_url 中的配置更改为 SimpleSamlPhp 登录网址:http://localhost:8080/simplesaml/module.php/core/loginuserpass.php

当我启动项目时,登录 url 生成为: http://localhost:8080/simplesaml/module.php/core/loginuserpass.phpSAML 请求=PHNhbWxwOkF1dGhuUmVxdWVzdCBJRD0iXzU5YTIxN2I0LTg1MGUtNDhiNy05YTU1LWVkMzU3M2U3MzUyNSIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMTUtMDEtMjFUMDc6MTM6NTlaIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cDovL2xvY2FsaG9zdDo0OTU3My9TYW1sQ29uc3VtZXIvQ29uc3VtZS5hc3B4IiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI%2bdGVzdC1hcHA8L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCIgQWxsb3dDcmVhdGU9InRydWUiIC8%2bPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCBDb21wYXJpc29uPSJleGFjdCIgLz48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyW5zcG9ydDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWxwOkF1dGhuUMVxdWVzdD4%3d

它在 SimpleSamlPHP 中作为错误页面返回: 在此处输入图像描述

我注意到 asp.net SP 生成的 url 与 saml-sql SimpleSamlPhp 页面生成的格式(过滤器)不同。比如:http://localhost:8080/simplesaml/module.php/core/loginuserpass.php?AuthState=_6ecd0987b485b771d67a5ddbd62ca4b22913a12fb6%3Ahttp%3A%2F%2Flocalhost%3A8080%2Fsimplesaml%2Fmodule.php%2Fcore%2Fas_login.php%3FAuthId% 3Dsaml-sql%26ReturnTo%3Dhttp%253A%252F%252Flocalhost%253A8080%252Fsimplesaml%252Fmodule.php%252Fcore%252Fauthenticate.php%253Fas%253Dsaml-sql

SimpleSamlPhp 登录 url 是如何生成的?如何在 asp.net 中使用 OneLogin 生成相同的 url?我还需要在 OneLogin 中配置或更改哪些内容以匹配 SimpleSamlPhp 所需的 SP 身份验证重定向(参数)?是否有其他框架可用于创建 asp.net webforms/mvc(最好是 asp.net mvc)SP 以连接到 SimpleSamlPhp 登录页面,该登录页面也将重定向到 .net 中的消费者页面(并读取令牌) sp。

4

1 回答 1

3

您需要为您的 .NET 应用程序实现 SAML 服务提供程序。它们有很多,OneLogin 就是一个例子。

登录 url?SAMLRequest=PHNhbWx...看起来正确,但尝试对其进行解码会出现错误。如果我将Kentor 的开放测试 idp您的有效负载一起使用,则会报告 deflate 解码错误(SAMLRequest 参数应进行 deflate 压缩,然后进行 BASE64 编码,最后进行 UrlEncoded)。

但是我成功地解码了你的有效载荷

Encoding.UTF8.GetString(Convert.FromBase64String(Uri.UnescapeDataString("PHNhbWxwOkF1dGhuUmVxdWVzdCBJRD0iXzU5YTIxN2I0LTg1MGUtNDhiNy05YTU1LWVkMzU3M2U3MzUyNSIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMTUtMDEtMjFUMDc6MTM6NTlaIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cDovL2xvY2FsaG9zdDo0OTU3My9TYW1sQ29uc3VtZXIvQ29uc3VtZS5hc3B4IiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI%2bdGVzdC1hcHA8L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCIgQWxsb3dDcmVhdGU9InRydWUiIC8%2bPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCBDb21wYXJpc29uPSJleGFjdCIgLz48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWxwOkF1dGhuUmVxdWVzdD4%3d")))

返回

<samlp:AuthnRequest ID="_59a217b4-850e-48b7-9a55-ed3573e73525" Version="2.0" IssueInstant="2015-01-21T07:13:59Z" ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST" AssertionConsumerServiceURL="http://localhost:49573/SamlConsumer/Consume.aspx" xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"><saml:Issuer xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">test-app</saml:Issuer><samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:unspecified" AllowCreate="true" /><samlp:RequestedAuthnContext Comparison="exact" /><saml:AuthnContextClassRef xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></samlp:AuthnRequest>

看起来您的 SP 实现没有为使用 SAML 重定向绑定进行正确的编码。使用的编码没有放气步骤,这是用于 SAML Post 绑定的。

如果您有 MVC 项目,我建议您查看Kentor.AuthServices.Mvc包。只需安装它,配置 web.config,它应该可以工作。

免责声明:我是 Kentor.AuthServices 的作者

于 2015-01-22T14:43:50.137 回答