我想導航到Microsoft Live oauth authentication頁面,以便我可以授權我的用戶並獲取該應用使用的令牌。當我使用以下NSURL
字符串時,我可以導航到該網站並授權我的應用程序,檢索該令牌。重定向uri在導航到oauth url時導致問題
let stringUrl = "https://login.live.com/oauth20_authorize.srf?client_id=\(clientId)&scope=\(scope)&response_type=code"
let url = NSURL(string: stringUrl)!
但是,我想重定向回我的應用程序(使用SFSafariViewController
)。爲此,我在我的應用中添加了一個URL Scheme,並將其作爲URL中的redirect_uri傳入。
let stringUrl = "https://login.live.com/oauth20_authorize.srf?client_id=\(clientId)&scope=\(scope)&response_type=code&redirect_uri=Lifestream://onedrive-oauth-callback"
let url = NSURL(string: stringUrl)!
然而在Live登錄網站給了我一個錯誤說出事了,它無法繼續。在顯示oauth登錄頁面之前發生此錯誤。它在導航到URL時立即發生。
我錯誤地創建了我的URL方案,或者將方案不恰當地傳遞給了重定向uri?我很困惑,爲什麼它沒有redirect_uri工作正常,但該網站無法加載,當我提供它。
有人能指出我在,我應該如何通過重定向URL我的應用程序,爲OAuth的重定向正確的方向?
更新
看來,微軟不會讓你註冊一個重定向URL,它是一個應用程序的URL方案。我不知道如何將這些信息返回到我的應用程序中,除了支付可以指向MSFT的網站外,這些信息將不會爲我做任何事情,而只是重定向到應用程序中。
對我來說,這聽起來像微軟不承認你的重定向URI。你有沒有註冊與微軟的重定向URI? OAuth 2規範說,如果重定向URI不被識別,認證流程應該暫停並且AP顯示一條失敗消息([參見4.1.2.1節](http://tools.ietf.org/html/) rfc6749#部分-4.1.2.1))。我之前還沒有使用微軟的OAuth服務(也沒有應用程序URL方案),所以如果微軟不讓您將自定義URI註冊爲重定向URI,我不能提供任何其他建議。 – justinpawela
請注意,無法識別的重定向URI(和客戶端ID,顯然)在某種程度上是唯一的驗證失敗,因爲它們是唯一不允許將錯誤發送到您的重定向端點的兩個條件。通常情況下,如果出現問題,你會得到一個錯誤代碼,你的客戶端應用程序可以決定如何處理它。由於OAuth提供程序無法驗證重定向URI,因此它們不會向其發送錯誤信息,因爲這可能會允許第三方爲了惡意目的而切換重定向URI。 – justinpawela
謝謝,我會看看,看看我是否可以註冊。如果不是,我將不得不看看其他人如何使用oauth和應用程序URL方案處理這些事情。 –