2015-01-21 89 views
1

我是SAML协议的新成员,我需要使用已连接的SimpleSamlPHP创建IdP与本地用户数据库。然后,我将不得不在asp.net web forms/mvc(最好是asp.net mvc)中创建一个SP。我设法将SimpleSamlPHP设置为IdP,并使用默认的saml-sql认证源/登录页面连接到本地用户数据库。可以看出:如何连接到asp.net web窗体/ asp.net mvc服务提供者(SP启动)中的SimpleSamlphp idp登录页面(SAML 2.0 p)

enter image description here

一旦用户登录,则返回默认SimpleSAMLPhp消费者页。正如所见: enter image description here

我注意到登录网址包含具有重定向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并遵循页面中所述的指示。我做了以下内容:在AccountSettings.certificate

  1. 改变配置IDP中继证书SimpleSamlPhp在AccountSettings.idp_sso_target_url
  2. 改变配置相匹配的SimpleSamlPhp登录网址为:http://localhost:8080/simplesaml/module.php/core/loginuserpass.php

当我开始项目的登录网址生成为: http://localhost:8080/simplesaml/module.php/core/loginuserpass.phpSAMLRequest = PHNhbWxwOkF1dGhuUmVxdWVzdCBJRD0iXzU5YTIxN2I0LTg1MGUtNDhiNy05YTU1LWVkMzU3M2U3MzUyNSIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMTUtMDEtMjFUMDc6MTM6NTlaIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cDovL2xvY2FsaG9zdDo0OTU3My9TYW1sQ29uc3VtZXIvQ29uc3VtZS5hc3B4IiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI%2bdGVzdC1hcHA8L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCIgQWxsb3dDcmVhdGU9InRydWUiIC8%2bPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCBDb21wYXJpc29uPSJleGFjdCIgLz48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydDw vc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWxwOkF1dGhuUmVxdWVzdD4%3D

返回作为错误页面在SimpleSamlPHP为: enter image description here

我注意到由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登录网址如何生成?如何在asp.net中使用OneLogin生成相同的网址?我还需要在OneLogin中配置或更改以匹配SimpleSamlPhp所需的SP身份验证重定向(参数)吗?是否还有其他框架可用于创建一个asp.net webforms/mvc(最好是asp.net mvc)SP,以连接到SimpleSamlPhp登录页面,该页面也将重定向到.net中的使用者页面(并读取令牌) SP。

回答

2

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

使用?SAMLRequest=PHNhbWx...的登录网址看起来是正确的,但试图对其进行解码会导致错误。如果我使用Kentor's open testing idpyour payload,则会报告解压缩解码错误(SAMLRequest参数应该是放缩压缩,然后是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包。只需安装它,configure web.config它应该工作。

声明:我是Kentor.AuthServices的作者。

相关问题