使用cURL对SharePoint Online进行身份验证(使用ADFS 2.1作为IP-STS)

时间:2015-02-19 22:43:35

标签: curl office365 saml adfs ws-trust

我正在尝试使用cURL设置一个简单的脚本,通过执行以下操作来监控我们的SharePoint Online网站: -

  1. 使用“../adfs/services/trust/13/UsernameMixed”端点使用联合身份(ADFS 2.1)登录我们的Office 365环境
  2. 获取SharePoint Cookie(FedAuth等)
  3. 浏览到SharePoint网站(验证内容等)
  4. 要执行第一步,我使用cURL将以下POST提交到ADFS端点:

    curl https://sts.contoso.com/adfs/services/trust/13/UsernameMixed --data @req.txt -H "Content-Type: application/soap+xml" -o out.txt
    

    我发送的SOAP信封请求以下内容(这只是请求的摘录):

    <trust:RequestSecurityToken xmlns:trust="http://docs.oasis-open.org/ws-sx/ws-trust/200512">
        <wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
            <a:EndpointReference>
                <a:Address>https://login.microsoftonline.com/extSTS.srf</a:Address>
            </a:EndpointReference>
        </wsp:AppliesTo>
        <trust:KeyType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Bearer</trust:KeyType>
        <trust:RequestType>http://docs.oasis-open.org/ws-sx/ws-trust/200512/Issue</trust:RequestType>
        <trust:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</trust:TokenType>
    </trust:RequestSecurityToken>
    

    我从中得到的回复包含X509证书,摘要和签名,我不知道该怎么做。我在网上看到的所有指南都会导致从这个初始请求中返回“BinarySecurityToken”,您可以将其提取并发布到Sharepoint.com以获取必要的cookie以获取访问权限。不可否认,他们都在使用MicrosoftOnline STS(云凭证),所以这只是微软STS可以实现的东西而不是ADFS服务器吗?

    或者我的方法中是否存在明显的错误?

    非常感谢任何帮助。

    干杯,

    邓肯

1 个答案:

答案 0 :(得分:2)

所以我通过找到这个有用的Stack答案(一个相当类似的问题)解决了这个问题,它向我展示了发送给Microsoft STS的格式(底部答案):

Claim auth from ADFS

执行此操作后,我能够获得“t = Eddejdnefdn23enjd ...”值,我可以将其发布到我的SharePoint站点并获得必要的SP cookie(FedAuth等)。

我现在停留在如何让这个概念与OWA一起工作......因为当我应用相同的逻辑时,Microsoft STS返回带有密码数据的加密XML而不是二进制安全性。这让我再次陷入困境,所以,如果有任何想法,请告诉我。

干杯