多因子鑑別 (MFA)

使用 Cloud Directory for IBM Cloud® App ID,您可以在應用程式登入流程中要求多重驗證因素。 第二個鑑別因素不僅可以確認使用者擁有其認證的知識,還可以存取其已登錄的電子郵件、電話號碼或鑑別器應用程式,從而增加應用程式的安全。 延伸 MFA 流程,您可以配置前置 MFA 及後置 MFA 延伸,以在執行時期做出關於哪些使用者必須完成第二因素的自訂決策,或提供您登入流程的分析資訊。

支援 App ID MFA 作為 Cloud Directory 使用者透過「登入小組件」進行的 OAuth 2.0 授權碼流程的一部分。 如果您要使用搭配 SAML 2.0 的企業登入或是社交登入,則可以透過該身分提供者啟用 MFA。

請參閱下圖,瞭解 MFA 流程如何適用於電子郵件或 SMS。

MFA 流程
Cloud Directory MFA 流程

  1. 當使用者順利登入您的應用程式時,他們會完成第一個鑑別因素。 然後,根據您的 MFA 配置,向使用者傳送包含 6 位數代碼的電子郵件或 SMS。

    啟用 MFA 後,除非 已設定延伸 功能,否則每次使用者嘗試登入時,App ID 登入 Widget 都需要第二種驗證方式。

  2. 使用者應該查看其電話或電子郵件以取得代碼,然後將其輸入所提供的畫面。

  3. 如果他們輸入的程式碼符合他們所傳送的程式碼,則會將使用者重新導向回您的應用程式並登入。 如果他們不正確地輸入程式碼,則第二個鑑別因素會失敗,且使用者無法存取您的資源。

如果未設定電子郵件驗證,App ID 會在背景驗證 MFA 通道。 例如,如果您設定 MFA 的電子郵件通道,但沒有設定電子郵件驗證,App ID 會在第一次成功的 MFA 登入時驗證電子郵件。 但是,如果您設定 SMS 通道,App ID 會在第一次成功登入時驗證使用者的電話號碼。 如果您使用 SMS 通道,且想要驗證電子郵件,請務必啟用電子郵件驗證。

配置電子郵件通道

您可以配置 App ID 透過電子郵件將 MFA 代碼傳送給使用者。

當您第一次啟用 MFA 時,會發生下列兩件事:

  • 依預設,會選取電子郵件通道。 您可以切換至 SMS 通道
  • App ID 會自動登錄已附加至 Cloud Directory 使用者設定檔的主要電子郵件。

如果使用者的電子郵件尚未在使用者註冊時透過管理 API 或透過電子郵件驗證進行確認,則會在順利驗證 MFA 代碼時加以確認。

第一次啟用 MFA 時,依預設,它會設為使用電子郵件。 您可以將此設定變更為使用 SMS,但無法同時配置這兩者。

使用 GUI

您可以透過 GUI 配置 MFA 電子郵件通道。

  1. 導覽到 App ID 控制面板的 Cloud Directory > Multifactor authentication 索引標籤。

  2. 在「設定」標籤上的「啟用多因素驗證」方塊中,將 MFA 切換為已啟用。 請確認您瞭解 MFA 是以進階安全事件來收費。 依預設,會選取電子郵件作為鑑別方法

  3. 電子郵件通道標籤中,檢閱電子郵件範本。 您可以選擇傳送含有所提供文字的範本,或撰寫您自己的訊息。 請務必使用正確的 HTML 標記。 在主控台中,您可以新增參數和插入圖片。 若要變更訊息的 語言,您可以使用 API 來設定語言。 但是,您必須對訊息的內容和轉換負責。 請查看下表,以瞭解您可以在此訊息中使用的表格清單,以及您可以傳送的所有其他訊息。 如果使用者未提供參數所取回的資訊,則它會出現空白。

    MFA訊息參數
    參數 說明
    %{display.logo} 顯示您為「登入小組件」配置的影像。
    %{user.displayName} 顯示使用者選擇要在與應用程式互動時使用的畫面名稱。
    %{user.email} 顯示使用者的已登錄電子郵件位址。
    %{user.username} 鑑別方法設為使用者名稱及密碼時,會顯示使用者的指定使用者名稱。
    %{user.firstName} 顯示使用者的指定名字。
    %{user.formattedName} 顯示使用者的完整名稱。
    %{user.lastName} 顯示使用者的指定暱稱。
    %{mfa.code} 顯示一次性 MFA 驗證碼。

    如果使用者未提供參數所取回的資訊,則它會出現空白。

使用 API

確定您具有下列必備項目:

  • App ID 實例的承租戶 ID。 您可以在儀表板的服務認證區段中找到此 ID。
  • Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件

若要啟用 MFA,請執行下列動作:

  1. 使用您的 MFA 配置向 /config/cloud_directory/mfa 端點發出 PUT 請求,將 isActive 設定為 true,從而啟用 MFA。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       --header 'Authorization: Bearer <IAMToken>' \
       -d '"isActive": true'
    
  2. 使用您的 MFA 設定,向 /mfa/channels/<channel> 終點提出 PUT 請求,啟用您的 MFA 通道。 當 isActive 設為 true 時,會啟用 MFA 頻道。

    $ curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/email \
       --header 'Content-Type: application/json' \
       --header 'Accept: application/json' \
       --header 'Authorization: Bearer <IAMToken>' \
       -d '"isActive": true'
    

如果您的 App ID Cloud Directory 範例設定為與自訂電子郵件寄件者合作,則 MFA 會使用相同的寄件者來傳送一次性代碼。 如需相關資訊,請參閱 Cloud Directory 文件

配置 SMS 通道

您可以將 SMS 訊息傳送給使用者,作為第二種驗證形式。 啟用 SMS 時,App ID 會自動嘗試註冊 Cloud Directory 使用者設定檔中找到的第一個 有效主要電話號碼。 如果此號碼無效,或在使用者設定檔上找不到任何電話號碼,則會顯示登錄小組件,讓使用者新增號碼。 然後,該號碼即成為使用者設定檔的一部分,在驗證之後,它會變成用於 MFA 的預設號碼。

當最初啟用 MFA 時,依預設會將它設為使用電子郵件。 您可以將此設定變更為使用 SMS,但無法同時配置這兩者。

開始之前

App ID 使用 Vonage (前身為 Nexmo) 傳送 MFA SMS 一次性密碼。

  • 取得您的 Vonage API 金鑰和密碼。 您可以在 Vonage 面板上的帳戶設定頁面中找到 Vonage API 金鑰和秘訣。 請參閱 Vonage 文件,瞭解如何取得憑證的進一步資訊。

  • 在 Vonage 註冊您的寄件者 ID 或 from 號碼。 這個 from 號碼出現在使用者的電話中,以顯示 SMS 來自何人。 在某些國家/地區,Vonage 支援字母數字寄件者 ID。App ID使用您輸入的值作為 Vonage 的寄件者 ID。 因此,如果 Vonage 支援這些 ID,您就可以使用 App ID。

使用 GUI

若要透過 GUI 配置 MFA,請參閱 Cloud Directory

  1. 導覽到 App ID 控制面板的 Cloud Directory > Multifactor authentication 索引標籤。

  2. 設定索引標籤上的啟用多因素驗證方塊中,將 MFA 切換為啟用。 請確認您瞭解 MFA 是以進階安全事件來收費。

  3. 選取 SMS 作為鑑別方法

  4. SMS 頻道索引標籤中,設定您的 Vonage 帳戶資訊。

    1. 如果您還沒有 Vonage 帳戶。 請建立一個帳戶。

    2. 從 Vonage 面板,按一下 SMS

    3. 自己撰寫代碼區段中,複製您的 API 金鑰,並將它貼到 App ID 儀表板的金鑰方框中。

    4. 複製 Vonage 面板中的 API 秘密,並將其貼到 App ID 面板中的 Secret 方塊。

    5. 輸入您要傳送訊息的 ID。 有效的號碼格式遵循 E.164 國際號碼格式。 例如,美國號碼採用以下形式 +19998887777。 您必須同時指定國碼(以 + 符號開頭)及國家訂閱者號碼。 在某些國家/地區,Vonage 支援字母數字寄件者 ID。App ID使用您輸入的值作為 Vonage 的寄件者 ID。 因此,如果 Vonage 支援這些 ID,您就可以使用 App ID。

使用 API

開始使用 API 之前,請確保滿足下列必要條件:

  • App ID 實例的承租戶 ID。 您可以在儀表板的服務認證區段中找到此 ID。
  • Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件
  1. 使用您的 MFA 配置向 /config/cloud_directory/mfa 端點發出 PUT 請求,將 isActive 設定為 true,從而啟用 MFA。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    
  2. 使用您的 MFA 設定,向 /mfa/channels/<channel> 終點提出 PUT 請求,啟用您的 MFA 通道。 當 isActive 設為 true 時,會啟用 MFA 頻道。 config 會接受 Nexmo API 金鑰和密碼,以及 from 號碼。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/nexmo' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": true,
       "config": {
          "key": "<nexmoKey>",
          "secret": "<nexmoSecret>",
          "from": <senderPhoneNumber>
       }
    }'
    
  3. 頻道設定成功後,請使用主控台上的測試按鈕或管理API來驗證您的Nexmo設定與連線是否正確。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/sms_dispatcher/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"phone_number": "+1 999 999 9999"}'
    

延伸 MFA

使用延伸,您可以將多因子鑑別的安全帶至下一個層次。 透過對誰需要提供第二種鑑別形式進行自訂決策,您可以為使用者提供更個人的應用程式體驗。 您也可以使用延伸來審核 MFA 行為,例如失敗的第二表單鑑別數。

開始之前

註冊擴展名稱之前,請確定您已具備下列先決條件:

  • App ID 實例的承租戶 ID。 此 ID 可在儀表板的 Applications 區段中找到。
  • Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件

如需更多關於使用延伸功能的限制與約束的資訊,請參閱 App ID limits

配置 pre-mfa

使用 mfa 之前的延伸,您可以定義準則,讓使用者在與應用程式互動時避免必須輸入第二種鑑別形式。

MFA 前流程
Cloud Directory MFA 前流程

  1. 當使用者順利登入您的應用程式時,App ID 會將 POST 要求傳送至您的延伸。
  2. 您的延伸會使用 POST 要求中的資訊,以根據您定義的準則來判斷該特定使用者是否可以跳過第二個鑑別因素需求。
  3. 您的配置會將 JSON 回應傳回類似於 {'skipMfa': true} 的 App ID。
  4. 根據來自配置的回應,App ID 會繼續進行 MFA 流程或授與應用程式存取權。

根據預設,如果在向您的延伸點請求時發生錯誤,App ID,則會要求使用者完成 MFA。

若要配置前置 MFA 延伸,請執行下列動作:

  1. 請先定義您要使用者符合的準則,然後他們才能跳過第二個鑑別因素。 如果您不確定,請參閱下列範例以取得一些構想。

    跳過 MFA 的範例標準
    使用案例範例 範例驗證
    您想要使用者每天只提供第二個鑑別因素一次。 配置您的延伸,以驗證 last_successful_first_factor 是否在同一天內。
    您具有已核准使用者的容許清單,這些使用者不需要每次都提供第二個因素。 配置延伸以驗證 usernameuser_id 是否位於容許清單中。
    您不希望在桌面上存取應用程式的使用者每次都提供第二個因素。 配置延伸以驗證 device_type 是否設為 web
  2. 當您知道準則時,請配置可接聽 POST 要求的延伸。 端點必須能夠讀取來自 App ID的有效負載。 在 MFA 流程啟動之前由 App ID 傳送的內文格式如下: {"jws": "jws-format-string"}。 您的延伸也可能 解碼並驗證 有效負載,內容是 JSON 物件,並傳回具有下列綱目的 JSON 回應: {"skipMfa": Boolean }。 例如:{'skipMfa': true}

    App ID轉送到您的擴充點的資訊。
    資訊 說明
    correlation_id 針對每一個 MFA 階段作業產生的亂數。 如果您同時具有前置 mfa 及後置 mfa 副檔名,則相同階段作業的每一個號碼都相同。 例如,3bb9236c-792f-4cca-8ae1-ada754cc4555
    extension 延伸的名稱。 對於此使用案例,延伸名稱為 premfa
    device_type 使用者用來存取應用程式的裝置類型。 選項包括:webmobile
    source_ip 對應用程式提出要求之裝置的 IP 位址。 例如,127.0.0.1
    headers 當使用者嘗試登入您的應用程式時,瀏覽器所傳回的資訊。 標頭看起來類似: {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}
    tenant_id 您應用程式的租戶 ID。
    client_id 應用程式的用戶端 ID。
    user_id 發出鑑別要求之使用者的 ID。 例如,11112222-3333-4444-2222-555522226666
    username 發出鑑別要求之使用者的使用者名稱。 例如,testuser@email.com
    application_type 您的應用程式類型。 例如,如果您的應用程式是單一頁面 JavaScript Web 應用程式,則會傳回 browserapp。 選項包括: browserappserverappmobileapp
    first_name 使用者名字。
    last_name 使用者暱稱。
    last_successful_first_factor 使用者前次正確輸入其認證的日期。 例如,1660032586651
    last_successful_mfa 使用者前次完成完整 MFA 流程的日期。 例如,1660032586651

    若要查看延伸範例,請參閱 範例

  3. config/cloud_directory/mfa/extensions/premfa 提出 PUT 要求,以向 App ID 實例登錄您的延伸。 該組態包括您分機的 URL 以及存取端點所需的任何授權資訊。 基於開發目的,isActive 設為 false。 請務必先測試您的配置,然後再啟用它。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": false,
       "config": {
          "url": "<extensionsURL>",
          "headers": {
                "Authorization": "<customExtensionAuthorizationHeader>"
             }
       }
    }'
    

    強烈建議您始終使用 HTTPS 而不是 HTTP 作為 extensions_URL,以確保您的連線是加密的。

  4. 順利配置延伸之後,請使用測試 API 來驗證您的端點正常運作。App ID 會使用範例值對已配置的延伸發出 POST 要求。

    curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>'
    
  5. 透過提出將 isActive 設為 true 的 PUT 要求來啟用延伸。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/premfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    

    若要停用延伸,請將 isActive 設為 false

配置 post-mfa

當您配置延伸並向 App ID登錄它時,服務會在每次出現第二個識別因素的鑑別嘗試之後呼叫您的延伸。 您可以使用該資訊為使用者制定更好的決策。 例如,您可以針對您的啟發式和規則使用 post-mfa 延伸集合資訊,然後使用前置 mfa 延伸來施行這些資訊。

MFA 後流程
Cloud Directory MFA 後流程

  1. 當使用者順利登入您的應用程式時,系統會提示他們輸入其第二個鑑別因素。

  2. 當第二個鑑別因素順利完成時,會同時發生兩個動作:

    1. App ID 會將登入的相關資訊傳送至您所配置的延伸。

    2. 使用者會重新導向至您的應用程式。

若要配置後置 MFA 延伸,請執行下列動作:

  1. 設定可以監聽 POST 請求的延伸點。 端點必須能夠讀取 App ID所傳送的有效負載。 它也可以選擇性地 解碼及驗證 App ID 所傳回的 JSON 有效負載,不會以任何方式由協力廠商變更。 傳回格式化為 {"jws": "jws-format-string"} 的字串,其中包含下列資訊:

    App ID轉送到您的擴充點的資訊。
    資訊 說明
    correlation_id 針對每一個 MFA 階段作業產生的亂數。 如果您同時具有 pre-mfa 和 post-mfa 延伸,則每個延伸的數字都相同。 例如,3bb9236c-792f-4cca-8ae1-ada754cc4555
    extension 延伸的名稱。 對於此使用案例,延伸名稱為 postmfa
    status MFA 狀態。 選項包括:successfailed
    reason MFA 失敗的原因。 例如,user locked out - exceeded maximum number of verification attempts
    device_type 使用者用來存取應用程式的裝置類型。 選項包括: webmobile
    source_ip 對應用程式提出要求之裝置的 IP 位址。 例如,127.0.0.1
    headers 當使用者嘗試登入您的應用程式時,瀏覽器所傳回的資訊。 標頭看起來類似於 {"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X x.y; rv:42.0) Gecko/20100101 Firefox/42.0"}
    tenant_id 您應用程式的租戶 ID。
    client_id 應用程式的用戶端 ID。
    user_id 發出鑑別要求之使用者的 ID。
    username 發出鑑別要求之使用者的使用者名稱。 例如,testuser@email.com
    application_type 您的應用程式類型。 例如,如果您的應用程式是單一頁面 JavaScript Web 應用程式,則會傳回 browserapp。 選項包括: browserappserverappmobileapp
    first_name 使用者名字。
    last_name 使用者暱稱。
  2. config/cloud_directory/mfa/extensions/postmfa 提出 PUT 要求,以向 App ID 實例登錄您的延伸。 該組態包括您分機的 URL 以及存取端點所需的任何授權資訊。 基於開發目的,isActive 設為 false。 請務必先測試您的配置,然後再啟用它。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa' \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{
       "isActive": false,
       "config": {
          "url": "<extensionsURL>",
          "headers": {
                "Authorization": "<customExtensionAuthorizationHeader>"
             }
       }
    }'
    

    強烈建議您始終使用 HTTPS 而非 HTTP 來設定 extensions_URL,以確保您的連線經過加密。

  3. 順利配置延伸之後,請使用測試 API 來驗證您的端點是否正確運作。App ID 會使用範例值對已配置的延伸發出 POST 要求。

    curl -X POST https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa/test \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>'
    
  4. 透過將 isActive 設定為 true 來啟用延伸。

    curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/config/cloud_directory/mfa/extensions/postmfa \
    --header 'Content-Type: application/json' \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer <IAMToken>' \
    -d '{"isActive": true}'
    

    若要停用延伸,請將 isActive 設為 false