跟Google Map、Facebook、Plurk等API一樣,程式要引用Live Connect API前,必須先註冊以取得一組專屬Client ID與Client Secret(相當於密碼)作為識別。使用自己的Live帳號登入Live Connect Developer Center後即可免費申請(注意,Metro Style App的申請方式不同)。

  1. 使用Windows Live帳號(Live ID,即Hotmail/MSN Messenger用的帳號)登入Live Connect開發者中心,可在My Apps介面為App申請Client ID。申請時要填寫應用程式名稱以及使用語言:
  2. 完成後可取得一組Client ID及Client Secret,稍後在程式中會用到。
  3. 在程式型OAuth授證流程中,需要一支Callback網頁程式(稱之為Redirect Page)保存Client Secret,並與Live Connect API溝通以取得Access Token,基於安全管控理由,必須事先登錄Redirect Page所在網域。該組Client ID在使用時,將只會允許該網域下的網頁作為Redirect Page,在我的案例中,Redirect Page網頁未來會放在 www.darkthread.net 網站下,故填入http://www.darkthread.net 。(針對行動裝置或桌面程式的授權流程,因無Server端Redirect Page,可改用特殊 httqs://oauth.live.com/desktop替代之,此時Redirect domain留空,Mobile client app請選Yes。)
  4. 除了上述設定,還可另外自訂應用程式的名稱、Logo、服務條款、隱私權聲明等資訊,將來會出現在請使用者確認同意App要求權限範圍(Scope)的Consent Page(同意頁面)上,Live Connect開發者中心有篇文章提供了詳細的出現位置示意圖。

完成以上設定,理論上可以開始應用它連接Live Connect,但在此之前,先補充一些文件常出現的術語: 註: OAuth協定的技術細節蠻複雜的,在此只簡單列舉一些閱讀MSDN文件會用到的術語觀念。MVP小朱之前曾寫過一系列介紹文章(而且還實做了一套Open Source的OAuth .NET程式庫),另外Level Up也有一篇簡介,有興趣的朋友可以參考。

【OAuth角色】

  • Resource Owner
    有權授與受保護資源存取權限的個體,例如: 一般使用者
  • Resource Server
    保存及管理受保護資源的伺服器,如保存信件、連絡人資料的Hotmail伺服器、保存文件、影音相片檔的SkyDrive伺服器
  • Client
    代表Resource Owner要求存取受保護資源的應用程式
  • Authorization Server
    負責驗證Resource Owner身分並獲得授權的伺服器
  • Resource Owner's Agent (User-Agent)
    用以承載Client應用程式的平台,例如: 當Client以Javascript撰寫在瀏覽器中執行,瀏覽器即User Agent

【OAuth Flow】

依循OAuth驗證使用者身分並取得授權的流程,Live Connect支援三種不同流程(詳見MSDN文件):

  1. Implicit Grant Flow
    主要應用於網站程式或桌面程式,程式呼叫httqs://oauth.live.com/authorize?client_id=CLIENT_ID&scope=SCOPES&response_type=token&redirect_uri=REDIRECT_URL,Live Connect提供登入介面及授權同意網頁(Consent Page),當取得授權後,Live Connect會導向REDIRECT_URL,並在後方加註Acess Token當成參數,程式取出Access Token後,即可用於向Resource Server存取相關資源。
  2. Authorization Code Grant Flow
    主要應用於伺服器對伺服器間的驗證流程,Client發出httqs://oauth.live.com/authorize?client_id=CLIENT_ID&scope=SCOPES&response_type=code&redirect_uri=REDIRECT_URI,接著Live Connect在識別使用者並取得同意後導向REDIRECT_URI並加上&code=[authorizationcode](不是直接給Access Token),REDIRECT_URI必須是伺服器可執行網頁,將code所傳入的authorizationcode配合Client ID、Client Secret送至httqs://oauth.live.com/token驗證,可取得Access Token,如此可在Access Token完全不外洩的狀況下,在伺服器端使用它向Resource Server取用資源。
  3. Sign-In Control Flow
    透過Live Connect提供的登入控制項封裝Implicit Grant Flow流程,只需引用相關的Javascript程式庫或.NET元件,撰寫相關事件邏輯、呼叫適當方法,即可完成登入授權,可大幅簡化自行處理驗證授權流程的細節。

【Scope】

在取得授權時,必須聲明要存取的範圍(Scope),同意網頁則會明列Client程式要求的授權範圍,使用者再決定是否同意。一般來說,最好以"足以運作的最小範圍"為原則,可減少使用者疑慮,獲得同意的機會較高,App的操作體驗也會較佳。以下是Live Connect目前定義的Scope範圍: (詳細說明可見MSDN文件)

  • wl.basic: 取得使用者個人檔案(Profile)基本資料及連絡人
  • wl.offline_access: 允許在使用者離線時繼續取得資料
  • wl.signin: 單一簽入功能(Single-Sign-On),若使用者已登入Live Connect則可自動登入該App
  • wl.brithday: 取得生日
  • wl.calendars: 讀取行事曆
  • wl.calendars_update: 更新行事曆
  • wl.contacts_calendars: 讀取連絡人(含使用者本人)的行事曆
  • wl.contacts_birthday: 取得連絡人(含使用者本人)的生日
  • wl.contacts_create: 建立連絡人
  • wl.photos: 讀取使用者的相簿、照片、影音檔
  • wl.contacts_photos: 讀取連絡人(含使用者本人)的相簿、照片、影音檔,以其所屬標籤與留言
  • wl.emails: 讀取使用者私人、偏好及公司電子郵件地址
  • wl.events_create: 在使用者預設行事曆建立事件
  • wl.messenger: 允許登入Live Messenger服務
  • wl.phone_numbers: 讀取使用者私人、公司及行動電話號碼
  • wl.postal_addresses: 讀取使用者的郵寄地址
  • wl.share: 允許更新使用者的狀態
  • wl.skydrive: 讀取使用者的SkyDrive
  • wl.skydrive_update: 讀取及更新使用者的SkyDrive
  • wl.contacts_skydrive: 讀取連絡人(含使用者本人)的SkyDrive檔案
  • wl.work_profile: 取得使用者的僱主及工作位置資訊
  • wl.applications: 取得使用者的Client ID
  • wl.applications_create: 建立Client ID

Comments

Be the first to post a comment

Post a comment