我正在尝试使用SAML验证用户登录。我有一个简单的HTML表单。

<form method="post" action="https://abcd/login">
   <input type="hidden" name="SAMLRequest" value="request" />
   <input type="hidden" name="RelayState" value="token" />
   <input type="submit" value="Submit" />
</form>


我对如何仅使用base64发送XMLSAMLRequestjavascript编码感到困惑。如果有人可以向我指出正确的方向或链接到演示,那将是巨大的帮助。

最佳答案

这取决于您使用的是哪种SAML2配置文件。假设您使用的是Web浏览器SSO(WBSSO),则可以通过POSTing自动将浏览器发送到URL来完成所有操作。用户访问您的应用程序,然后您创建SAMLRequest和RelayState并将表单自动过帐到IdP。 IdP对用户进行身份验证(您不必关心这一部分),然后使用包含身份验证信息和属性的base64 SAMLReponse自动将浏览器重定向回您的断言消费者服务(ACS)URL。有一个SP启动过程here的简单概述。

这是我的方法:

<html>
  <body Onload="document.forms[0].submit()">
    <form method="POST" action="<%= request.getAttribute("wbsso_endpoint") %>">
      <input type="hidden" name="SAMLRequest" value="<%= request.getAttribute("SAMLRequest") %>">
      <% if (request.getAttribute("RelayState") != null) { %>
        <input type="hidden" name="RelayState" value="<%= request.getAttribute("RelayState") %>">
      <% } %>
    </form>
  </body>
</html>

10-05 22:37