2012-12-15 23 views
5

我試圖在OAuth中使用新的Box認證API。我想使用我目前用來授權我的應用程序的帳戶帳戶的憑證。在框中使用新的OAuth 2

OAuth的配置請求重定向URI,我不知道必須在那裏輸入什麼。在之前的身份驗證方法中,給出了以下URI http://www.box.net/api/1.0/auth/ {ticket},但是這是在獲取身份驗證票證後完成的。

我是OAuth的新手,所以我的問題可能有點明顯......但我想知道如何使用帳戶用戶的憑證進行身份驗證。

我在Windows應用程序中這樣做,所以我也想了解如何顯示來自請求的響應。

回答

1

OAuth 2過程的第一步是將用戶發送到https://api.box.com/oauth2/authorize,其中response_type和client_id作爲請求的參數。重定向網址將與您在V1中設置的相同。如果您CLIENT_ID是123456,舉例來說,你可以將用戶引導到

https://api.box.com/oauth2/authorize?response_type=code&client_id=123456 

See here for more info

+0

很抱歉,但我不會在所有的文檔理解。在auth V1中,我沒有使用任何重定向網址。我剛拿到一張票,並打電話給http://www.box.net/api/1.0/auth。 – user1466502

+1

對不起,但我不明白所有的文件。在auth V1中,我沒有使用任何重定向網址。我剛拿到一張票,並打電話給http://www.box.net/api/1.0/auth。 我試圖把https://www.box.net/api/1.0/auth作爲OAuth需要一個https URL,但如果我打電話https://api.box.com/oauth2/authorize?response_type=code&client_id= {我的客戶端ID},我得到錯誤:invalid_client。從我所看到的client_id與V1 api_key的值相同,因此它與auth V1一起工作,我被OAuth卡住了。 如果有人有一個具體的例子登錄到一個簡單的箱子帳戶,高度讚賞! – user1466502

+1

@ user1466502,您的應用程序桌面或網站?嘗試設置爲redirect_uri任何https URL(甚至不存在)。在輸入login/pwd數據並允許你從box.com得到響應後,你將會在默認情況下包含重定向到box.com,但在響應正文中還有一些標記(如果我不會誤認爲iframe)與你的URL和代碼值 –

2

當我在摸索中有關創建桌面試圖獲得登錄身份驗證的應用程序Box.net答案花了超過它真的應該有...

所以我決定在拼湊一篇文章我的網站通過創建一個可以登錄並使用SDK的C#.Net 4.0桌面應用程序進行對話。這是使用他們的新OAuth 2.0登錄系統。

首先,我們使用標準HttpWebRequest對象發送初始Web請求,以獲取OAuth 2.0登錄的UI網頁。一旦Web響應被返回,我們將其轉換爲Stream,供我們的Web瀏覽器使用。重定向URI可以是任何基於HTTPS的URI。

string baseURI = "https://www.box.com/api/oauth2/authorize?"; 
string responseType = "&response_type=code"; 
string clientId = "&client_id=YOUR OWN CLIENT ID"; 
string redirectURI = "&redirect_uri=https://app.box.com/services/poc_connector"; 

var targetUri = new Uri(baseURI + responseType + clientId + redirectURI); 
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(targetUri); 

注入流進我們使用的文檔屬性

webBrowser1.DocumentStream = view; 

一旦完成所有用戶的操作由網絡瀏覽器控制處理的Web瀏覽器的控制。在用戶按下「授予訪問權限」按鈕時捕獲身份驗證令牌。我們爲Web瀏覽器Navigated事件添加一個事件監聽器。

private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e) 
{ 
    if (e.Url.AbsolutePath != "blank" && e.Url.ToString().Contains("&code=")) 
    { 
     Token = e.Url.ToString().Substring(e.Url.ToString().IndexOf("&code=")); 
     Token = Token.Replace("&code=", String.Empty); 
     this.Close(); 
    } 
} 

鏈接我的原創文章和源代碼:link

+1

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的終點(vs.而另一個引用的中途停留時間往往會隨着時間推移而過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra