多因子鑑別 (MFA)
使用 IBM Cloud® App ID的 Cloud Directory,您可以在應用程式登入流程期間需要多個鑑別因素。 第二個鑑別因素不僅可以確認使用者擁有其認證的知識,還可以存取其已登錄的電子郵件、電話號碼或鑑別器應用程式,從而增加應用程式的安全。 延伸 MFA 流程,您可以配置前置 MFA 及後置 MFA 延伸,以在執行時期做出關於哪些使用者必須完成第二因素的自訂決策,或提供您登入流程的分析資訊。
支援 App ID MFA 作為 Cloud Directory 使用者透過「登入小組件」進行的 OAuth 2.0 授權碼流程的一部分。 如果您要使用搭配 SAML 2.0 的企業登入或是社交登入,則可以透過該身分提供者啟用 MFA。
請參閱下圖,以查看 MFA 流程如何針對電子郵件或 SMS 運作。
-
當使用者順利登入您的應用程式時,他們會完成第一個鑑別因素。 然後,根據您的 MFA 配置,向使用者傳送包含 6 位數代碼的電子郵件或 SMS。
啟用 MFA 時,除非已配置 延伸,否則每次使用者嘗試登入時,App ID「登入小組件」都需要第二種驗證形式。
-
使用者應該查看其電話或電子郵件以取得代碼,然後將其輸入所提供的畫面。
-
如果他們輸入的程式碼符合他們所傳送的程式碼,則會將使用者重新導向回您的應用程式並登入。 如果他們不正確地輸入程式碼,則第二個鑑別因素會失敗,且使用者無法存取您的資源。
如果未配置電子郵件驗證,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 電子郵件通道。
-
導覽至 App ID 儀表板的 雲端目錄> 多因子鑑別 標籤。
-
在 啟用多因子鑑別 方框中的 設定 標籤上,將 MFA 切換為 已啟用。 請確認您瞭解 MFA 是以進階安全事件來收費。 依預設,會選取電子郵件作為鑑別方法。
-
在電子郵件通道標籤中,檢閱電子郵件範本。 您可以選擇傳送含有所提供文字的範本,或撰寫您自己的訊息。 請務必使用正確的 HTML 標記。 在 GUI 中,您可以新增參數並插入影像。 若要變更訊息的 語言,您可以使用 API 來設定語言。 不過,您負責訊息的內容和轉換。 請參閱下表,以查看您可以在此訊息中使用的表格清單,以及您可以傳送的所有其他訊息。 如果使用者未提供參數所取回的資訊,則它會出現空白。
表 1. 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,請執行下列動作:
-
使用 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'
-
使用您的 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 一次性代碼。
使用 GUI
若要透過 GUI 配置 MFA,請參閱 Cloud Directory。
-
導覽至 App ID 儀表板的 雲端目錄> 多因子鑑別 標籤。
-
在 啟用多因子鑑別 方框中,在 設定標籤上,將 MFA 切換為 已啟用。 請確認您瞭解 MFA 是以進階安全事件來收費。
-
選取 SMS 作為鑑別方法。
-
在 SMS 通道 標籤中,配置您的 Vonage 帳戶資訊。
-
如果您還沒有 Vonage 的帳戶。 請建立一個帳戶。
-
從 Vonage 儀表板中,按一下 SMS。
-
在自己撰寫代碼區段中,複製您的 API 金鑰,並將它貼到 App ID 儀表板的金鑰方框中。
-
複製 Vonage 儀表板中的 API 密碼,並將它貼到 App ID 儀表板的 密碼 方框中。
-
輸入您要從中傳送訊息的 ID。 有效號碼格式遵循 E.164 國際編號格式。 例如,US 數字的格式為
+19998887777
。 您必須同時指定國碼(以+
符號開頭)及國家訂閱者號碼。 在某些國家/地區中,Vonage 支援英數寄件者 ID。App ID 會使用您輸入作為 Vonage 寄件者 ID 的值。 因此,如果 Vonage 支援它們,您可以將 ID 與 App ID搭配使用。
-
使用 API
開始使用 API 之前,請確保滿足下列必要條件:
- App ID 實例的承租戶 ID。 您可以在儀表板的服務認證區段中找到此 ID。
- Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件。
-
使用 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}'
-
使用您的 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> } }'
-
順利配置頻道之後,請使用使用者介面上的測試按鈕或使用管理 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"}'
配置 TOTP 通道
透過啟用時間型一次性密碼 (TOTP) (採用 Cloud Identity技術),您可以容許使用者使用鑑別器應用程式 (例如 IBM Verify、Google Authenticator 或 LastPass) 來驗證其身分。 如需更進階的 IAM 工作流程,請參閱 IBM Cloud Identity。
- 使用者第一次嘗試登入您的應用程式時,會顯示包含 QR 碼的登錄小組件。 使用者使用其鑑別器應用程式掃描 QR 碼。 如果他們無法掃描 QR 碼,則可以選擇檢視可直接進入其應用程式的文字碼。
- 在其鑑別器應用程式中,會向使用者顯示快速到期的通行碼。 在該時間內,他們必須在 MFA 盤查畫面中輸入六位數數字,以完成登入程序。
- 即會授與使用者對您應用程式的存取權。
- 每次後續登入嘗試都會提示使用者輸入在其應用程式中顯示的程式碼,但不會再次顯示 QR 碼。
當最初啟用 MFA 時,依預設會將它設為使用電子郵件。 您可以將設定變更為使用 TOTP,但無法同時配置兩者。
開始之前
Cloud Identity 用作 TOTP 登入流程的一部分。 請確定您瞭解資料的儲存方式,以及它如何影響相符性需求。 進一步瞭解。
使用 GUI
您可以在 App ID 儀表板中使用來配置 TOTP 流程。
-
移至 App ID 儀表板的 雲端目錄> 多因子鑑別> 設定 標籤。
-
將 MFA 切換至 已啟用,以啟用鑑別。 驗證您是否瞭解 MFA 已作為 進階安全事件 收費。
-
選取 Authenticator 應用程式 (TOTP) 作為鑑別方法。
-
選用項目: 自訂應用程式在使用者鑑別器應用程式中的顯示方式。
-
移至 TOTP 標籤。
-
提供應用程式名稱。 此名稱必須少於 50 個字元,但可以是您想要的任何名稱。 大部分人選擇使用其應用程式的名稱。
-
使用 API
開始使用 API 之前,請確保滿足下列必要條件:
- App ID 實例的承租戶 ID。 此 ID 可以在儀表板的 服務認證 或 應用程式認證 區段中找到。
- Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件。
-
對
isActive
設為true
的/config/cloud_directory/mfa
端點提出 PUT 要求,以啟用 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}'
-
使用您的 MFA 配置對
/mfa/channels/<channel>
端點提出 PUT 要求,以啟用您的 MFA 通道。 當isActive
設為true
時,會啟用 MFA 頻道。 您可以選擇性地將應用程式名稱新增至配置。curl -X PUT https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/mfa/channels/totp' \ --header 'Content-Type: application/json' \ --header 'Accept: application/json' \ --header 'Authorization: Bearer <IAMToken>' \ -d '{ "isActive": true, "config": { "appname": "My App" } }'
刪除使用者的 TOTP 登記
當使用者透過鑑別器應用程式管理其 MFA 代碼時,有時他們不再具有應用程式的存取權。 例如,他們可能已刪除它或遺失其電話。 如果發生此情況,他們必須先聯絡您以刪除其登記,然後才能重新登錄您的應用程式。
-
在進行 API 呼叫之前,請確定您具有下列資訊:
-
對 TOTP 端點提出刪除要求,以刪除使用者的登記狀態。
curl -X DELETE https://<region>.appid.cloud.ibm.com/management/v4/<tenantID>/cloud_directory/Users/<userID>/mfa/totp' \ --header 'Authorization: Bearer <IAMToken>'
延伸 MFA
使用延伸,您可以將多因子鑑別的安全帶至下一個層次。 透過對誰需要提供第二種鑑別形式進行自訂決策,您可以為使用者提供更個人的應用程式體驗。 您也可以使用延伸來審核 MFA 行為,例如失敗的第二表單鑑別數。
開始之前
在登錄延伸之前,請確定您具有下列必要條件:
- App ID 實例的承租戶 ID。 此 ID 可在儀表板的 應用程式 區段中找到。
- Identity and Access Management (IAM) 記號。 如需協助取得 IAM 記號,請參閱 IAM 文件。
如需使用延伸的限制相關資訊,請參閱 App ID 限制。
配置 pre-mfa
使用 mfa 之前的延伸,您可以定義準則,讓使用者在與應用程式互動時避免必須輸入第二種鑑別形式。
- 當使用者順利登入您的應用程式時,App ID 會將 POST 要求傳送至您的延伸。
- 您的延伸會使用 POST 要求中的資訊,以根據您定義的準則來判斷該特定使用者是否可以跳過第二個鑑別因素需求。
- 您的配置會將 JSON 回應傳回類似於
{'skipMfa': true}
的 App ID。 - 根據來自配置的回應,App ID 會繼續進行 MFA 流程或授與應用程式存取權。
依預設,如果在要求延伸點期間發生錯誤,則 App ID 需要使用者完成 MFA。
若要配置前置 MFA 延伸,請執行下列動作:
-
請先定義您要使用者符合的準則,然後他們才能跳過第二個鑑別因素。 如果您不確定,請參閱下列範例以取得一些構想。
表 3. 跳過 MFA 的範例準則 使用案例範例 範例驗證 您想要使用者每天只提供第二個鑑別因素一次。 配置您的延伸,以驗證 last_successful_first_factor
是否在同一天內。您具有已核准使用者的容許清單,這些使用者不需要每次都提供第二個因素。 配置延伸以驗證 username
或user_id
是否位於容許清單中。您不希望在桌面上存取應用程式的使用者每次都提供第二個因素。 配置延伸以驗證 device_type
是否設為web
。 -
當您知道準則時,請配置可接聽 POST 要求的延伸。 端點必須能夠讀取來自 App ID的有效負載。 在 MFA 流程啟動之前由 App ID 傳送的內文格式如下:
{"jws": "jws-format-string"}
。 您的延伸也可能 解碼並驗證 有效負載,內容是 JSON 物件,並傳回具有下列綱目的 JSON 回應:{"skipMfa": Boolean }
。 例如:{'skipMfa': true}
。表 4. App ID 轉遞至延伸點的資訊。 資訊 說明 correlation_id
針對每一個 MFA 階段作業產生的亂數。 如果您同時具有前置 mfa 及後置 mfa 副檔名,則相同階段作業的每一個號碼都相同。 例如, 3bb9236c-792f-4cca-8ae1-ada754cc4555
。extension
延伸的名稱。 對於此使用案例,延伸名稱為 premfa
。device_type
使用者用來存取應用程式的裝置類型。 選項包括: web
和mobile
。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
。 選項包括:browserapp
、serverapp
和mobileapp
。first_name
使用者名字。 last_name
使用者暱稱。 last_successful_first_factor
使用者前次正確輸入其認證的日期。 例如, 1660032586651
。last_successful_mfa
使用者前次完成完整 MFA 流程的日期。 例如, 1660032586651
。若要查看延伸範例,請參閱 範例。
-
向
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>" } } }'
強烈建議您一律使用 HTTP 而非
extensions_URL
,以確保您的連線已加密。 -
順利配置延伸之後,請使用測試 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>'
-
透過提出將
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 延伸來施行這些資訊。
-
當使用者順利登入您的應用程式時,系統會提示他們輸入其第二個鑑別因素。
-
當第二個鑑別因素順利完成時,會同時發生兩個動作:
-
App ID 會將登入的相關資訊傳送至您所配置的延伸。
-
使用者會重新導向至您的應用程式。
-
若要配置後置 MFA 延伸,請執行下列動作:
-
配置可接聽 POST 要求的延伸點。 端點必須能夠讀取 App ID所傳送的有效負載。 它也可以選擇性地 解碼及驗證 App ID 所傳回的 JSON 有效負載,不會以任何方式由協力廠商變更。 傳回格式化為
{"jws": "jws-format-string"}
的字串,其中包含下列資訊:表 5. App ID 轉遞至延伸點的資訊。 資訊 說明 correlation_id
針對每一個 MFA 階段作業產生的亂數。 如果您同時具有 pre-mfa 和 post-mfa 延伸,則每個延伸的數字都相同。 例如, 3bb9236c-792f-4cca-8ae1-ada754cc4555
。extension
延伸的名稱。 對於此使用案例,延伸名稱為 postmfa
。status
MFA 狀態。 選項包括: success
和failed
。reason
MFA 失敗的原因。 例如, user locked out - exceeded maximum number of verification attempts
。device_type
使用者用來存取應用程式的裝置類型。 選項包括: web
、mobile
。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
。 選項包括:browserapp
、serverapp
和mobileapp
。first_name
使用者名字。 last_name
使用者暱稱。 -
向
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>" } } }'
強烈建議您一律對 extensions_URL 使用 HTTP 而非 HTTP,以確保您的連線已加密。
-
順利配置延伸之後,請使用測試 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>'
-
透過將
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
。