2016-05-10 13 views
1

認証にOKTAを使用する顧客のSharePointサーバーにプログラムで接続する必要があります。私はこれを見たpostは有望そうだが、OKTAから有効なセッションクッキーを返すように見えない。バックエンドサービスからOKTA経由でSharePointに認証

私は正常に/ api/v1/authnエンドポイントを呼び出してsessionTokenを取り戻すことができますが、/ api/v1/sessionsを呼び出すと、そのセッショントークンを使ってadditionalFields = cookieTokenを呼び出すと、以下JSONで、禁断:

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

私はこれが解決得ることができますと仮定すると、私は私がcookieTokenで呼び出す必要がありますURLのか分かりません。 URLはSharePointにリダイレクトされるOKTAエンドポイントか、クッキーとのセッションをセットアップするSharePointエンドポイントですか?

アップデート:私はこのoktaエンドポイントを呼び出すことができています - JSON

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

としての私のユーザーの資格情報を使用して>/API/V1 /セッションadditionalFields = cookieTokenをそしてワンを検索することができるのですか?ブラウザでSAMLセッションを開始するには、このリンクで使用することができ、時間のクッキー・トークン:

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

ブラウザで動作し、ユーザーは自動的に認証し、SharePointで終わるされます。しかし、プログラムのHTTPクライアント(Apache HTTP Clientなど)で同じリンクを実行すると動作しないため、このセッション「setup」は少なくとも部分的にjavascriptによって実現されているようです。 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 

をFORBIDDEN私はOKTAまたはSharePointはSAML経由でプログラムによる認証をサポートしていないこと、これが失われた原因である場合は疑問に思い始めています。

答えて

0

可能です。

ここに私がしたことがあります。 1)OktaからsessionTokenを入手してください。それにはokta認証トークンが必要です。

2)質問HTTPGET(sharepointEmbeddedLink + +はsessionToken) また、このヘッダを追加します。新しいBasicHeader(AUTHORIZATION、String.Formatの( "SSWS%sの"、OKTA_AUTHORIZATION_TOKEN "onetimetoken =?");

3)次に、HTMLレスポンスを解析してSAMLの引数を取得する必要があります.WLESULT、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)あなたはSTEP3または4でのSharePoint SITEURLを取得し、次のこれをやる:)

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がOKであれば、あなたが使用できるいくつかのクッキーヘッダーがあるでしょう:D

関連する問題