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

用户登录后,将返回默认的SimpleSAMLPhp使用者页面。如所见:

我注意到登录URL包含具有重定向url的AuthnState。因此: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的地方,也是SimpleSAMPPhp动态生成authnstate的地方。
这样,我需要创建一个asp.net webform/MVC (最好是asp.net mvc)项目,该项目将是一个SP来将用户重定向到simpleSAMLPhp登录页面,并指定在AuthnState param中找到的所有参数,包括重定向到asp.net项目的使用者页面。我在互联网上搜索,发现WIF不支持SAML协议,并找到其他框架/库进行测试。我目前正在尝试实现OneLogin来创建一个asp.net SP @ https://onelogin.zendesk.com/hc/en-us/articles/201175694-SAML-Toolkit-for-C-and-ASP-NET,并遵循页面中描述的说明。我做了以下工作:
启动项目时,登录url将生成为:http://localhost:8080/simplesaml/module.php/core/loginuserpass.phpSAMLRequest=PHNhbWxwOkF1dGhuUmVxdWVzdCBJRD0iXzU5YTIxN2I0LTg1MGUtNDhiNy05YTU1LWVkMzU3M2U3MzUyNSIgVmVyc2lvbj0iMi4wIiBJc3N1ZUluc3RhbnQ9IjIwMTUtMDEtMjFUMDc6MTM6NTlaIiBQcm90b2NvbEJpbmRpbmc9InVybjpvYXNpczpuYW1lczp0YzpTQU1MOjIuMDpiaW5kaW5nczpIVFRQLVBPU1QiIEFzc2VydGlvbkNvbnN1bWVyU2VydmljZVVSTD0iaHR0cDovL2xvY2FsaG9zdDo0OTU3My9TYW1sQ29uc3VtZXIvQ29uc3VtZS5hc3B4IiB4bWxuczpzYW1scD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOnByb3RvY29sIj48c2FtbDpJc3N1ZXIgeG1sbnM6c2FtbD0idXJuOm9hc2lzOm5hbWVzOnRjOlNBTUw6Mi4wOmFzc2VydGlvbiI%2bdGVzdC1hcHA8L3NhbWw6SXNzdWVyPjxzYW1scDpOYW1lSURQb2xpY3kgRm9ybWF0PSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6bmFtZWlkLWZvcm1hdDp1bnNwZWNpZmllZCIgQWxsb3dDcmVhdGU9InRydWUiIC8%2bPHNhbWxwOlJlcXVlc3RlZEF1dGhuQ29udGV4dCBDb21wYXJpc29uPSJleGFjdCIgLz48c2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZiB4bWxuczpzYW1sPSJ1cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YXNzZXJ0aW9uIj51cm46b2FzaXM6bmFtZXM6dGM6U0FNTDoyLjA6YWM6Y2xhc3NlczpQYXNzd29yZFByb3RlY3RlZFRyYW5zcG9ydDwvc2FtbDpBdXRobkNvbnRleHRDbGFzc1JlZj48L3NhbWxwOkF1dGhuUmVxdWVzdD4%3d
它在SimpleSamlPHP中作为错误页返回如下:

我注意到,asp.net SP生成的url与saml页面生成的url格式(过滤器)不同。喜欢:login.php%3FAuthId%3Dsaml-sql%26ReturnTo%3Dhttp%253A%252F%252Flocalhost%253A8080%252Fsimplesaml%252Fmodule.php%252Fcore%252Fauthenticate.php%253Fas%253Dsaml-sql
SimpleSamlPhp登录url是如何生成的?如何使用OneLogin在asp.net中生成相同的url?我还需要在OneLogin中配置或更改什么来匹配SimpleSamlPhp所需的SP身份验证重定向(参数)?还有其他框架可以用来创建asp.net webforms/mvc (最好是asp.net mvc) SP,以连接到SimpleSamlPhp登录页面,该页面还可以重定向到.net sp中的使用者页面(并读取令牌)。
发布于 2015-01-22 14:43:50
您需要的是.NET应用程序的Service实现。他们有很多,OneLogin就是一个例子。
带有?SAMLRequest=PHNhbWx...的登录url看起来是正确的,但试图将其解码为错误。如果我在肯塔基的开放式测试中使用你的有效载荷,就会报告一个压缩解码错误( 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包。只要安装它,配置web.config,它就能工作了。
免责声明:我是Kentor.AuthServices的作者。
https://stackoverflow.com/questions/28061645
复制相似问题