2013-12-19 25 views
6

好吧,我們正在構建一個iPhone應用程序,以打擊Office 365上託管的Sharepoint 2013網站。如果我在C#中構建此應用程序,我已經完成了,只要使用TokenHelper.cs就可以獲得大部分路徑。不幸的是,據我所知,目前還沒有Objective-C的TokenHelper。Sharepoint 365目標C中的ACS OAuth:領域錯誤 - 需要幫助

因此,我們已經成功地獲得了OAuth身份驗證/授權頁面,併成功獲得授權碼。

在此之後,我們因爲知道我們錯過了POST中的領域ID來獲取我們的訪問和刷新標記,所以我們有點難過。我終於明白TokenHelper是如何做到這一點的,而且我們重複了這一點。 (這是對/_vti_bin/client.svc的額外調用,你希望得到一個401,這樣你就可以將領域id從標題中拉出來)

我們現在有一個領域ID,閱讀文檔和TokenHelper並在Fiddler中看到,需要以下兩種方式使用:POST的URL構造以及該POST的標題中的資源值。

所以帖子的網址如下:

accounts.accesscontrol.windows.net/{realm ID} /標記/的OAuth/2

我們的資源價值是這樣的:

資源= 00000003-0000-0ff1-ce00-000000000000%2F {境界URL}%40 {境界ID}

這至少連接好,接受我們的POST。不幸的是,我們收到以下消息:

ACS50012:驗證失敗。 ACS90011:領域'不是當前服務名稱空間的配置領域。

此消息使我認爲可能存在配置問題,但我確實無法確定。

是否有其他人嘗試過在Objective-C中對365網站執行OAuth並取得成功?

我也可以發佈代碼,但我最初試圖迴避。

+0

我周圍的POST內容的一些問題,所以我分享我可以 - 很明顯,我不能透露客戶端ID或祕密。 [ URL:accounts。accesscontrol.windows.net/e8f0027b-39c8-49a0-8fce-bb606a118df8/tokens/OAuth/2,Header: Content-Type = application/x-www-form-urlencoded,Body:grant_type = authorization_code&client_id = {client id}&client_secret = {client secret}&redirect_uri = {uri}&resource = 00000003-0000-0ff1-ce00-000000000000%2Fthreewill.sharepoint.com%40e8f0027b-39c8-49a0-8fce-bb606a118df8] –

+0

嗨,你能解決這個問題嗎?請分享您的解決方案。 –

+0

實際上,我還沒有解決這個問題。儘管如此,我會盡力在本週或下一次重溫。微軟開放技術團隊最近發佈了針對Android的O365的API,所以顯然它是可行的 - 我將嘗試通過該解決方案來查看。 –

回答

5

我最近遇到同樣的問題,並有一種感覺,它可能是你看到的同樣的問題。

對OAuth的正確POST請求如下:

POST https://accounts.accesscontrol.windows.net/<REALM_GUID>/tokens/OAuth/2 
x-www-form-urlencoded params: 
grant_type:authorization_code 
client_id:<CLIENT_ID>@<REALM_GUID> 
client_secret:<CLIENT_SECRET> 
code:<AUTH_CODE> 
redirect_uri:<REDIRECT_URI> 
resource:00000003-0000-0ff1-ce00-000000000000/<SHAREPOINT_AUTHORITY>@<REALM_GUID> 

對我來說,主要的疑難雜症是,「CLIENT_ID」的值所需追加到客戶端ID境界ID。不包括領域ID將引發「ACS90011:領域」不是當前服務名稱空間的配置領域。「

HTH

+1

需要被標記爲答案! MS文檔中肯定缺少這個! – palig