2016-01-20 95 views
7

我在Perl中創建了此簡單代碼,用於連接Microsoft OneDrive API和列表文件和文件夾。但現在我停止了獲取訪問令牌。Perl中的Microsoft OneDrive API客戶端無法獲取訪問令牌

我看了Microsoft's documentation找出來,但是我什麼都沒發現。

下面是代碼:

#!/usr/bin/perl -w 
use strict; 
use LWP; use LWP::UserAgent; 

my $client_id = '...'; 
my $client_secret = '...'; 
my $client_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36'; # whatever 
my $ua = new LWP::UserAgent; 
$ua->->show_progress(1); # Microsoft use url redirection and I want to see the steps 
$ua->agent($client_agent); 
$ua->timeout(30); 
my $URL = 'https://login.live.com/oauth20_desktop.srf'; # from documentation 
my @params = (
    "client_id=".$client_id, 
    "scope=onedrive.readonly", 
    "response_type=token", 
    "redirect_uri=https://login.live.com/oauth20_desktop.srf" 
); 
my $URLFULL = $URL."?".join("&", @params); 
my $res = $ua->get($URLFULL); 
if ($res->is_success) { 
    print $res->request->uri->as_string."\n"; # it should be the url with a valid token 
    my $block = $res->as_string; 
    print $block; # this is the full response 
} else { 
    die ($res->as_string."error in loading page"); 
} 

所以我發GET消息的URL,它應該被重定向到什麼包含訪問令牌的網址。但我重定向到了我所說的相同的URL。

如何獲取訪問令牌?或者我的代碼中的錯誤在哪裏?還是有任何工作的例子?

+0

如果你只是貼,它看起來像你有一個錯字:'「的client_id =」 $。 clien_tid,' – bolav

+0

謝謝你,修正 – netdjw

+0

對於這個特性,如果你在做任何請求,我認爲明智的做法是在把它放到你的代碼之前用mozila上的REST進行測試。 – robel

回答

1

在本文檔中,它說,與PARAMS的URL應該是這樣的:

GET https://login.live.com/oauth20_authorize.srf?client_id={client_id}&scope={scope}&response_type=token&redirect_uri={redirect_uri} 

$URL參數似乎是錯誤的。 $URL應該是https://login.live.com/oauth20_authorize.srf,重定向URL是https://login.live.com/oauth20_desktop.srf

我沒有嘗試的代碼,因爲我不希望創建和MS解釋只是爲了這一點;)

相關問題