ITFoxtec.Identity.Saml2-TestIdpCore-如何添加登录屏幕



背景:

我一直在使用ITFoxtec.Identity.Saml2-TestIdpCore项目来创建自定义IdP。通过一些小麻烦,我已经设法使签名/加密断言工作(针对OneLogin wordpress saml插件(。

我的麻烦包括:

  • onelogin wordpress saml令牌解密代码似乎有一个使断言签名无效/中断的错误:Issue#136
  • TestIdPCore在加载私钥时出现问题(至少在我的环境中的.NET core 6中(-Pull Request#112
  • [TestIdPCore]不包括每个依赖方的令牌加密证书(相反,它似乎在Saml2配置元素中(-Pull Request#113

在我的环境中解决上述问题之后;琐碎的";示例随后起作用:在AuthController.Login((Action方法中返回一组硬编码的声明。然后,我尝试设置一个实际的登录(用户名/密码(视图(使用包含用户名和密码属性的相应UserAuthenticationRequest模型(。

我修改了现有的Login(GET request(Action方法以返回一个新的View("Authentication"),它显示一个简单的Username/Password表单(与我的新"UserAuthenticationRequest"模型绑定(。

然后,我添加了第二个带有[HttpPost("Login")]属性的公共async Task<IActionResult> Login(UserAuthenticationRequest request)Action方法,以及从以前存在的Login((方法迁移原始代码的[ValidateAntiForgeryToken]属性。但是,Saml2RedirectBinding类显式检查Request方法,并在看到POST而不是GET:时抛出异常

InvalidSaml2BindingException:不是HTTP GET方法

ITfoxtec.Identity.Saml2.Saml2RedirectBinding.Read(HttpRequest request, Saml2Request saml2RequestResponse, string messageName, bool validate, bool detectReplayedTokens)
ITfoxtec.Identity.Saml2.Saml2Binding<T>.ReadSamlRequest(HttpRequest request, Saml2Request saml2Request)
MyExampleIdP.Controllers.AuthController.ReadRelyingPartyFromLoginRequest<T>(Saml2Binding<T> binding) in AuthController.cs

我也尝试过使用Saml2PostBinding,但它希望SAMLRequestRelayState参数与登录表单一起提交

我看到其他一些StackOverflow帖子询问如何创建这个登录表单,但似乎没有任何关于如何克服上述问题的指导:

  • 如何使用ITfoxtec创建IdP
  • ITfoxtec.Identity.Saml2登录示例

我的问题:

扩展TestIdpCore的正确方法是什么,以便它可以包含一个琐碎的用户名/密码登录表单?如果有人能给我指明正确的方向,我会很乐意向TestIdpCore项目提交另一个pull请求。

最后,感谢ITFoxtec开发并与社区共享这样一个完整的SAML 2.0库的开源.NET/.NET核心实现,该库能够同时扮演IdP和RelyingParty角色。

我有一个开源项目FoxID,您可以在其中查看如何添加用户对话框。根据您想要达到的安全级别,有很多事情需要考虑。

最新更新