我需要以编程方式连接到使用 OKTA 进行身份验证的客户的 SharePoint 服务器。我看到这篇文章看起来很有希望,但似乎无法从 OKTA 获得有效的会话 cookie。
我可以成功调用 /api/v1/authn 端点并取回 sessionToken,但是当我转身并使用该会话令牌调用 /api/v1/sessions?additionalFields=cookieToken 时,我总是收到 403 - Forbidden,其中以下json:
{
"errorCode": "E0000005",
"errorSummary": "Invalid Session",
"errorLink": "E0000005",
"errorId": "oaew0udr2ElRfCnZvBFt075SA",
"errorCauses": []
}
假设我可以解决这个问题,我不确定应该使用 cookieToken 调用的 URL。该 url 是一个将重定向到 SharePoint 的 OKTA 端点,还是一个将使用 cookie 设置会话的 SharePoint 端点?
更新: 我可以使用我的用户凭据作为 json 调用这个 okta 端点 -> /api/v1/sessions?additionalFields=cookieToken
{
"username": "user@email.com",
"password": "P@ssw0rd"
}
并且能够检索可与此链接一起使用的一次性 cookie 令牌,以在浏览器中启动 SAML 会话:
https://[mydomain].okta.com/login/sessionCookieRedirect?redirectUrl=[sharepoint site url]&token=[cookie token]
这适用于浏览器,用户会自动进行身份验证并最终进入 SharePoint。但是,似乎这个会话“设置”至少部分是通过 javascript 实现的,因为在编程 HTTP 客户端(例如 Apache HTTP 客户端)中执行相同的链接不起作用。http 客户端通过几个重定向发送并最终到达 SharePoint 站点,但用户未经过身份验证。响应为 403 - 禁止使用以下标头:
403 - 禁止
Content-Type -> text/plain; charset=utf-8
Server -> Microsoft-IIS/8.5
X-SharePointHealthScore -> 0
SPRequestGuid -> 0ecd7b9d-c346-9081-cac4-43e41f3b159a
request-id -> 0ecd7b9d-c346-9081-cac4-43e41f3b159a
X-Forms_Based_Auth_Required -> https://[sharepoint site]/_login/autosignin.aspx?ReturnUrl=/_layouts/15/error.aspx
X-Forms_Based_Auth_Return_Url -> https://[sharepoint site]/_layouts/15/error.aspx
X-MSDAVEXT_Error -> 917656; Access denied. Before opening files in this location, you must first browse to the web site and select the option to login automatically.
X-Powered-By -> ASP.NET
MicrosoftSharePointTeamServices -> 15.0.0.4709
X-Content-Type-Options -> nosniff
X-MS-InvokeApp -> 1; RequireReadOnly
Date -> Fri, 13 May 2016 15:02:38 GMT
Content-Length -> 13
我开始怀疑这是否是一个失败的原因,OKTA 或 SharePoint 不支持通过 SAML 进行编程身份验证。