为OpenAM编写SAML2 AuthnRequest

时间:2011-10-19 11:24:13

标签: single-sign-on opensso saml-2.0 openam

我正在尝试为OpenAM撰写SAML2 AuthnRequest。我有一个URL,我可以执行反对的工作,但在将此组成XHTML帖子表单时遇到问题。

带有查询字符串的工作URL是

http://internal.authhost.com:8080/opensso/idpssoinit?NameIDFormat=urn:oasis:names:tc:SAML:2.0:nameid-format:transient&metaAlias=%2FMYRealm%2Fidp&spEntityID=https%3A%2F%2Fsaml.salesforce.com&binding=urn%3Aoasis%3Anames%3Atc%3ASAML%3A2.0%3Abindings%3AHTTP-POST&RelayState=webj_captureCustomerDetails

我的html表单如下:

<form action="http://internal.authhost.com:8080/opensso/idpssoinit" method="post" target="new">
  <input type="text" name="SAMLRequest" value="PHNhbWxwOkF1dGhuUmV..."></input>
  <input type="text" name="RelayState" value="webj_captureCustomerDetails"></input>
  <input type="submit"/>
</form>

,SAMLRequest的值是

的Base 64编码表示
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
    ID="_d7607d551380ac97853a6ff4907c4ef01219be97dd" Version="2.0"
    IssueInstant="2008-05-27T07:46:06Z" ForceAuthn="true" IsPassive="false"
    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
    AssertionConsumerServiceURL="https://cs4.salesforce.com/?saml=lkjhkljhkljhkjhlkjh"
    ProviderName="https://saml.salesforce.com">
    <saml:Issuer>https://saml.salesforce.com</saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
        AllowCreate="true"/>
</samlp:AuthnRequest>

发出此表单会导致OpenAM发出错误消息,指出“服务提供商ID为空”

我可以立即看到XML不包含metaAlias = / MYRealm / idp参数,但是该消息表明它无法找到spEntityID = https://saml.salesforce.com参数。

请告知需要在XML中指定这两个属性(metaAlias和spEntityID)的位置。

指向OpenAM COT / IdP配置如何映射SAML AuthnRequest消息的某个地方的链接也将受到赞赏。

1 个答案:

答案 0 :(得分:2)

问题是我访问了错误的URL,本应该点击spssoinit,因为它是服务提供商的intitated SSO