【发布时间】:2017-01-13 16:50:06
【问题描述】:
我正在处理他们通过 OKTA 的 SAML 进行身份验证的项目。我已经成功地将 SAMLResponse 发送(通过 POST 方法)到网站的集成工作。
以真正的 TDD 方式,我从编写一些单元测试开始。我的单元测试采用 SAMLResponse(Base64 编码)。但是,我的所有单元测试都有效,因为 SAMLResponse 只有几分钟的生命周期(过期),所以我的单元测试会在几分钟后中断。
所以我需要定期登录 OKTA,然后使用 Chrome 开发工具捕获发送到我的开发站点的流量。然后我将 SAMLResponse 复制并粘贴到我的单元测试中,然后返回通过单元测试。显然,这不是一个理想的情况。
所以我的问题是如何以自动方式(最好是 C#)登录 Okta 以获得 SAMLResponse?我假设有一些我可以使用用户名和密码发布到的 URL 并取回 SAMLReponse。我所有 Fiddler 试图理解所需沟通的尝试都让我感到沮丧。我正在寻找你可能有的任何指导。提前致谢。
【问题讨论】:
-
我不熟悉 SAML,但从您的问题来看,我认为您要么在不正确的级别进行测试,要么需要进一步抽象。我会看到,您处理响应的位置与实际消息无关,而对消息的内容更重要,即能够伪造响应应该有效。我永远不会期望单元测试必须调用外部函数,如果它必须登录到外部应用程序,它会响起警报。
-
同意。这真的正在成为一个集成测试。如果 SAMLResponses 没有过期,它可能真的是一个单元测试,但根据 Okta 的说法,这不是一个选项。鉴于 SAML 集成的复杂性,我们每周依靠测试来查找配置问题。
-
关于您关于能够“伪造”回复的评论。那是我最初尝试的,但是响应(只是 Base 64 字符串)包含证书签名信息。因此,如果您更改任何响应,验证将失败。我知道我打破了一些单元测试的最佳实践,但我也被 SAML 和 OKTA 逼到了一个角落,但我仍然不会放弃我的集成测试,因为我从中获得了如此多的价值......只是希望它们成为自动化。
标签: c# unit-testing integration-testing saml okta