2016-05-10 5 views
1

У меня есть необходимость программно подключиться к серверу SharePoint клиента, который использует OKTA для аутентификации. Я видел это post, который выглядел многообещающим, но, похоже, не может получить действительный файл cookie сессии из OKTA.аутентифицировать в SharePoint через OKTA из службы back-end

Я могу успешно вызывать конечную точку/api/v1/authn и возвращать сеансToken, но когда я обернусь и вызову/api/v1/sessions? AdditionalFields = cookieToken с этим токеном сеанса, я всегда получал 403 - Запретный со следующим JSON:

{ 
"errorCode": "E0000005", 
"errorSummary": "Invalid Session", 
"errorLink": "E0000005", 
"errorId": "oaew0udr2ElRfCnZvBFt075SA", 
"errorCauses": [] 
} 

Предполагая, что я могу получить это решить, я не уверен в URL я должен позвонить с cookieToken. Является ли url конечной точкой OKTA, которая будет перенаправляться на SharePoint или является конечной точкой SharePoint, которая настроит сеанс с файлом cookie?

Update: Я могу назвать этот окт конечной точки ->/API/v1/сессий additionalFields = cookieToken с моими учетными данными в формате JSON

{ 
"username": "[email protected]", 
"password": "[email protected]" 
} 

И я в состоянии получить одноцветный? маркер печенья времени, которое может быть использовано с этой ссылкой, чтобы начать сеанс SAML в браузере:

https://[mydomain].okta.com/login/sessionCookieRedirect?redirectUrl=[sharepoint site url]&token=[cookie token] 

Это работает в браузере, пользователь автоматически заверен и заканчивается в SharePoint. Тем не менее, похоже, что эта «настройка» сеанса хотя бы частично достигается с помощью javascript, поскольку выполнение одной и той же ссылки в программном HTTP-клиенте (например, Apache HTTP Client) не работает. Клиент http отправляется через пару переадресаций и заканчивается на сайте SharePoint, но пользователь не аутентифицирован. Отклик 403 - Forbidden со следующими заголовками:

403 - Forbidden

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 ,

ответ

0

Возможно.

Вот что я сделал. 1) Получите свою сессию из Окта. Для этого вам понадобится токен авторизации okta.

2) Сделайте HttpGet (sharepointEmbeddedLink + sessionToken) Кроме того, добавить этот заголовок: новый BasicHeader (РАЗРЕШЕНИЯ, string.Format ("ССШН% S", OKTA_AUTHORIZATION_TOKEN "onetimetoken =?");

3) Затем вам нужно проанализировать html-ответ и получить SAML-аргументы: WRESULT, WCTX, WA

4) Далее сделайте это - возьмите эти 3 и создайте строку в этом формате «application/x-www-form- urlencoded». Это будет что-то вроде этого: wa = wsign1.0 & wctx = somevalue & wresult = somevalue.

 byte[] out = theStringAbove.getBytes; 
     int length = out.length; 

     URL url = new URL("https://login.microsoftonline.com/login.srf"); 
     URLConnection con = url.openConnection(); 
     HttpURLConnection http = (HttpURLConnection) con; 

     http.setRequestMethod("POST"); // PUT is another valid option 
     http.setDoOutput(true); 
     http.setInstanceFollowRedirects(true); 
     http.setFixedLengthStreamingMode(length); 
     http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
     http.setRequestProperty("User-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1"); 
     http.connect(); 
     http.getOutputStream().write(out); 

5) В ответ вы получите токен saml. Вам придется снова проанализировать html-файл.

6) Вы получите Sharepoint SiteURL в шаге 3 или 4, и сделать это в следующем :)

HttpPost httpPost = new HttpPost(siteUrl + "_forms/default.aspx?wa=wsignin1.0"); 
    byte[] utf8TokenStringBytes = ("t=" + samlToken).getBytes(StandardCharsets.UTF_8); 
    HttpEntity entity = new ByteArrayEntity(utf8TokenStringBytes); 
    httpPost.setEntity(entity); 
    httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 
    httpPost.setHeader("User-agent", "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.215 Safari/535.1"); 

    HttpResponse response = httpclient.execute(httpPost, httpContext); 

Если Everyting нормально, вы будете иметь некоторые печенья заголовки, которые вы можете использовать: D