2017-01-21

Azure Active Directory - Part 10 ( Azure AD 與應用程式整合開發的概念)

開發人員可以直接使用 Azure Active Directory (Azure AD) 當做身份認驗證的管道,大幅簡化開發的難度及縮短時程,加上 Azure Active Directory (Azure AD) 支援 OAuth 2.0 及 OpenID Connect 等業界常見標準協定,讓 Azure Active Directory (Azure AD) 不再僅限於 .NET 開發,接著就來看看哪些是開發前必備的知識


驗證基本流程

驗證流程

  1. user 使用 Azure AD 進行身份驗證
  2. 驗證通過取得 token
  3. 使用 token 存取 web application

安全性 toekn 中的宣告

Azure AD 的安全性 token 可以用來驗證身份、識別目錄租用戶、顯示使用者資訊....etc, Azure AD 安全性 token 有三種

  1. access_tokens

    • 源自 OAuth 2 協定
    • 用來存取 API
  2. refresh_tokens

    • 源自 OAuth 2 協定
    • 用來取得新的 access_tokens
    • 屬多重資料,可用來取得不同資源的 access_tokens
  3. id_token

    • 源自 OpenID 協定
    JWT 宣告 Name 說明
    appid 應用程式識別碼 識別使用權杖來存取資源的應用程式。 應用程式代表本身或使用者行事。 應用程式識別碼通常代表應用程式物件,但也可以代表 Azure AD 中的服務主體物件。
    aud 對象 權杖的預定接收者。 接收權杖的應用程式必須確認對象值正確無誤,並拒絕任何適用於不同對象的權杖。
    appidacr 應用程式驗證內容類別參考 指出如何驗證用戶端。 若為公用用戶端,此值為 0。 如果使用用戶端識別碼和用戶端密碼,此值為 1。
    acr 驗證內容類別參考 指出主體的驗證方式 (相對於應用程式驗證內容類別參考宣告中的用戶端)。 值為 "0" 表示使用者驗證不符合 ISO/IEC 29115 的需求。
    - 驗證即刻 記錄驗證發生的日期和時間。
    amr 驗證方法 識別如何驗證權杖的主體。
    given_name 名字 提供使用者的名字 (如 Azure AD 使用者物件上所設定)。
    groups 群組 提供代表主體群組成員資格的物件識別碼。 這些值都是唯一的(請參閱「物件識別碼」),而且可安全地用來管理存取權,例如強制授權以存取資源。群組宣告中包含的群組會透過應用程式資訊清單的 "groupMembershipClaims"屬性,針對每個應用程式進行設定。 Null 值將會排除所有群組,"SecurityGroup" 值只會包含 Active Directory 安全性群組成員資格,而 "All" 值將會包含安全性群組和 Office 365 通訊群組清單。
    idp 識別提供者 記錄驗證權杖主體的身份識別提供者。 除非使用者帳戶位於與簽發者不同的租用戶中,否則這個值與 Issuer 宣告值相同。
    iat IssuedAt 儲存權杖簽發的時間。 這通常用來測量權杖有效時間。
    iss 簽發者 識別負責建構並傳回權杖的 Security Token Service (STS)。 在 Azure AD 傳回的權杖中,簽發者為 sts.windows.net。 簽發者宣告值中的 GUID 是 Azure AD 目錄的租用戶識別碼。 租用戶識別碼是目錄的不可變且可靠的識別碼。
    family_name 姓氏 提供使用者的姓氏 (如 Azure AD 使用者物件中所定義)。
    unique_name 名稱 提供人類看得懂的值,用以識別權杖的主體。 此值不保證是租用戶中的唯一值,而且僅限用於顯示目的。
    oid 物件識別碼 包含 Azure AD 中物件的唯一識別碼。 這個值不可變,而且無法重新指派或重複使用。 使用物件識別碼來識別 Azure AD 查詢中的物件。
    roles 角色 表示透過群組成員資格,直接或間接授與主體的所有應用程式角色,而且可用來強制執行角色型存取控制。 應用程式角色是透過應用程式資訊清單的 appRoles 屬性,針對每個應用程式進行定義。 每個應用程式角色的 value 屬性就是出現在角色宣告中的值。
    scp Scope 識別授與用戶端應用程式的模擬權限。 預設權限為 user_impersonation。 受保護資源的擁有者可以在 Azure AD 中註冊其他的值。
    sub 主旨 識別權杖判斷提示其相關資訊的主體,例如應用程式的使用者。 這個值不可變,而且無法重新指派或重複使用,因此可用來安全地執行授權檢查。 因為主體一律存在於 Azure AD 簽發的權杖中,所以建議您將此值使用於一般用途授權系統中。 SubjectConfirmation 不是宣告。 它會描述如何驗證權杖的主體。 Bearer 表示主體已經由持有權杖來確認。
    tid 租用戶識別碼 不可變、無法重複使用的識別碼,用以識別簽發權杖的目錄租用戶。 您可以使用此值來存取多租用戶應用程式中的租用戶特定目錄資源。 例如,您可以使用此值來識別在圖形 API 呼叫中的租用戶。
    nbf、exp 權杖存留期 定義權杖有效的時間間隔。 驗證權杖的服務應確認目前的日期在權杖存留期內,否則應該拒絕此權杖。 此服務最多允許超過權杖存留期範圍五分鐘,以考量 Azure AD 與服務之間的時鐘時間差異 (「時間偏差」)。
    upn 使用者主體名稱 儲存使用者主體的使用者名稱。
    ver 版本 儲存權杖的版本號碼。

登錄應用程式的基本概念

應用程式使用 Azure AD 進行身份認驗證,必需將應用程式註冊入 Azure AD 的目錄中。需要的資訊如下

  1. 應用程式識別碼 URI

    讓 Azure AD 識別該提供哪個應用程式的 token

  2. 回覆 URL 和重新導向 URI

    Azure AD 傳回驗證結果用

  3. 用戶端識別碼

    應用程式註冊進 Azure AD 時,Azure AD 指定的 id

  4. 金鑰

    應用程式註冊進 Azure AD 時,Azure AD 指定的 key

應用程式支援類型

  1. Web Browser to Web Application
    • user 使用瀏覽器經由 Azure AD 驗證後登入 web 應用程式

      Web Browser to Web Application

  2. Single Page Application (SPA)
    • spa 網頁透過 Azure AD 驗證後存取 web api

      Single Page Application (SPA)

  3. Native Application to Web API
    • app 透過 Azure AD 驗證後存取 web api

      Native Application to Web API

  4. Web Application to Web API
    • user 使用瀏覽器經由 Azure AD 驗證後登入 web 應用程式,web application 再存取 web api

      Web Application to Web API

  5. Daemon or Server Application to Web API
    • 精靈或是伺服器程式透過 Azure AD 驗證後存取 web api

      Daemon or Server Application to Web API

參考資料

  1. Azure AD 的驗證案例
  2. Azure AD 權杖參考

沒有留言:

張貼留言