但如果你每次開這個App都要重新取得授權,那真會讓人火都燒起來了,而解決這樣的問題我們必須用到一個技巧Single Sign-On,意思就是使用者只要授權一次,再來就可以不用一直確認,App可以持續使用該授權。
[問題]
然而在WP8上用Live Id登入有相當多的資訊,其中這篇算是最接近的(因為我用起來還是沒有SSO),其中的問題在於 InitializeAsync 這個 function 起不了作用,即便是正常執行還是沒有拿到Session//錯誤寫法
LiveAuthClient liveIdClient = new LiveAuthClient("YOUR CLIENT ID GOES HERE");
var scope = new[] { "wl.emails", "wl.basic", "wl.signin", "wl.offline_access" };
LiveLoginResult result = await liveIdClient.InitializeAsync(scope);
if(rsult.Session==null){
//未授權
}else{
//取得授權
}
其中Scope的部分請參考Live Connect網頁,他各代表不同權限。
[主要核心Scope]
wl.basic – 使用者基本個人檔案資訊的讀取權。同時也會啟用使用者連絡人清單的讀取權。
wl.offline_access – 應用程式隨時讀取和更新使用者資訊的能力。如果沒有這個領域,應用程式只能在使用者登入 Live Connect 且使用您的應用程式時才能存取使用者資訊。
wl.signin – 單一登入行為。使用「單一登入」,當使用者登入 Live Connect 時也會登入到您的網站。
wl.signin – 單一登入行為。使用「單一登入」,當使用者登入 Live Connect 時也會登入到您的網站。
[解決方式]
用InitializeAsync()嘗試取得授權,若不成功在用LoginAsync(scope)取得。LiveAuthClient liveIdClient = new LiveAuthClient(""YOUR CLIENT ID GOES HERE"");
var scope = new[] { "wl.emails", "wl.basic", "wl.signin", "wl.offline_access" };
//嘗試取得授權
LiveLoginResult result = await liveIdClient.InitializeAsync();
if(rsult.Session==null){
//未授權, 再次取得授權
result = await liveIdClient.LoginAsync(scope);
}else{
//取得授權
}
if(result.Status == LiveConnectSessionStatus.Connected)
{
LiveConnectClient client = new LiveConnectClient(result.Session);
LiveOperationResult meResult = await client.GetAsync("me");
}
其中wl.offline_access這個scope是絕對不能少的,如果你沒加到這項也會沒辦法SSO。




沒有留言:
張貼留言