セルフ・サービスを使用したSMSファクタによるMFAへの登録

このユースケースでは、SMSファクタを使用したマルチファクタ認証(MFA)でのセルフサービス登録に、アイデンティティ・ドメインREST APIを使用するステップ・バイ・ステップの例を示します。

idm-samples GitHubリポジトリ内のidcs-rest-clientsフォルダから、アイデンティティ・ドメイン認証ユースケース・サンプル・コレクションおよびグローバル変数ファイルをダウンロードし、Postmanにインポートします。

前提条件のステップとして、これらのステップを実行する前にMEトークンを取得する必要があります。MEトークンの取得の詳細は、「認証APIを使用したアクセス・トークンの生成」を参照してください。

ノート

これらのステップでは、「マルチファクタ認証設定の構成」を使用して、MFAの関連ファクタを有効にすることを前提としています。

Step1: SMSファクタを使用したセルフサービス登録の作成

このステップでは、/admin/v1/MyAuthenticationFactorEnrollerエンドポイントに対するPOSTリクエストでSMS登録を開始します。クライアントには次の属性が含まれている必要があります:

  • value: ユーザーIDを定義します。{{HOST}}/admin/v1/MeにGETコールを実行して、"id"値を取得できます。
  • displayName: デバイスの表示名を定義します
  • countryCode: SMSテキストが送信される電話番号の国コードを定義します
  • phoneNumber: SMSテキストが送信される電話番号を定義します

リクエストの例

JSON形式のPOSTリクエスト本文のコンテンツの例を次に示します:

{
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
  ],
  "user": {
    "value": "c810ff4522eb437abac013291c1984d1"
  },
  "displayName": "Joe's Personal Phone",
  "countryCode": "+44",
  "phoneNumber": "1122334455",
  "authnFactors": [
    "SMS"
  ]
} 

レスポンスの例

次の例に、レスポンスボディーの内容を JSON形式で示します。

{
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorEnroller"
    ],
    "user": {
        "value": "c810ff4522eb437abac013291c1984d1",
        "$ref": "https://example.identitycloud.com/admin/v1/Users/c810ff4522eb437abac013291c1984d1"
    },
    "displayName": "Joe's Personal Phone",
    "countryCode": "+44",
    "phoneNumber": "XXXXXXX455",
    "authnFactors": [
        "SMS"
    ],
    "meta": {
        "resourceType": "MyAuthenticationFactorEnroller",
        "location": "https://example.identitycloud.com/admin/v1/MyAuthenticationFactorEnroller"
    },
    "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
    "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179"
}

レスポンスでは、次のステップでdeviceIdおよびrequestIdを渡す必要があります。

エラー・レスポンスの例

userIdが無効な場合のJSON形式のエラー・メッセージの例を次に示します。400 HTTPレスポンス・コードが返されます。
{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:Error",
        "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
    ],
    "detail": "AuthenticationFactorEnroller.user references a User with ID 1fa35f74491d44ef5a7cc25bfdb1c8b1c that does not exist.",
    "status": "400",
    "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
        "messageId": "error.common.validation.invalidReferenceResource"
    }
}

phoneNumberが正しくない場合の JSON形式のエラーメッセージの例を次に示します。400 HTTPレスポンス・コードが返されます。

{
    "schemas": [
        "urn:ietf:params:scim:api:messages:2.0:Error",
        "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
    ],
    "detail": "Your phone number +91123 is not valid.",
    "status": "400",
    "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
        "messageId": "error.ssocommon.auth.invalidPhoneNumber",
        "additionalData": {
            "params": "+91123",
            "msgId": "error.ssocommon.auth.invalidPhoneNumber"
        }
    }
}

ステップ2: SMSによるOTPを使用したセルフサービス登録の開始

このステップでは、POSTリクエストでSMS経由でOTPを/admin/v1/MyAuthenticationFactorInitiatorエンドポイントに送信するようにリクエストします。クライアントには次の属性が含まれている必要があります:

requestId:ステップ1のレスポンスで受信

deviceId:ステップ1のレスポンスで受信

userName:ユーザーのユーザー名

リクエストの例

JSON形式のPOSTリクエスト本文のコンテンツの例を次に示します:

{
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
  ],
  "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
  "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
  "userName": "jbloggs",
  "authFactor": "SMS"
}

レスポンスの例

JSON形式のレスポンスのコンテンツの例を次に示します:

{
    "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
    "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
    "authFactor": "SMS",
    "userName": "jbloggs",
    "displayName": "Joe's Personal Phone",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ]
}

OTPコードはSMSを使用してユーザーのモバイル・デバイスに送信されます。レスポンスでは、次のステップでdeviceIdおよびrequestIdを渡す必要があります。

2a.セルフサービス登録リクエストの開始によるSMSによるOTP再送信

ユーザーがOTPを再送信する場合は、ステップ2で説明したのと同じペイロードをサーバーに再送信する必要があります。

リクエストの例

JSON形式のPOSTリクエスト本文のコンテンツの例を次に示します:

{
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
  ],
  "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
  "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
  "userName": "jbloggs",
  "authFactor": "SMS"
}

レスポンスの例

JSON形式のレスポンスのコンテンツの例を次に示します:

{ 
    "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
    "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
    "authFactor": "SMS",
    "userName": "jbloggs",
    "displayName": "Joe's Personal Phone",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorInitiator"
    ]
}

OTPコードはSMSを使用してユーザーのモバイル・デバイスに送信されます。レスポンスでは、次のステップでdeviceIdおよびrequestIdを渡す必要があります。

ステップ3: OTPを使用したセルフサービス登録の検証

このステップでは、/admin/v1/MyAuthenticationFactorValidatorエンドポイントに対するPOSTリクエストでユーザーのSMS登録を検証します。

クライアントには次の属性が含まれている必要があります:

  • otpCode:ユーザーがデバイスで受信したコード
  • requestId:ステップ2のレスポンスで受信
  • deviceId:ステップ2のレスポンスで受信

リクエストの例

次の例に、JSON形式のPOSTリクエストのコンテンツを示します:

{
  "schemas": [
    "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
  ],
  "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
  "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
  "otpCode": "191224",
  "authFactor": "SMS",
  "scenario": "ENROLLMENT"
}
    

レスポンスの例

JSON形式のレスポンスのコンテンツの例を次に示します:

{
    "authFactor": "SMS",
    "deviceId": "92142250e2ab4608b5c6532eb73e3d7c",
    "requestId": "a0a7f9bf-13a8-43f3-bcc7-2087dc3f7a18o-o1548346179",
    "scenario": "ENROLLMENT",
    "status": "SUCCESS",
    "displayName": "Joe's Personal Phone",
    "schemas": [
        "urn:ietf:params:scim:schemas:oracle:idcs:AuthenticationFactorValidator"
    ],
    "mfaStatus": "ENROLLED",
    "mfaPreferredDevice": "2b27b8c072d64b899d41c8470acea32a",
    "mfaPreferredAuthenticationFactor": "SMS",
    "securityQuestionsPresent": false,
    "devicesCount": 3,
    "emailFactorEnrolled": true
} 
レスポンスで、属性mfaStaus:"ENROLLED"は、ユーザーがMFAに登録したことを示します。mfapreferredAuthenticationFactor属性は、優先メソッドとして設定されたファクタを示します。この例ではSMSです。
ノート

最初の登録済ファクタがSMSと異なる場合、この値は異なる可能性があります。

エラー・レスポンスの例

OTPが正しくない場合のJSON形式のエラー・メッセージの例を次に示します。401 HTTPレスポンス・コードが返され、登録に失敗します。

{
  "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:Error",
    "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error"
  ],
  "detail": "Invalid passcode.",
  "status": "401",
  "urn:ietf:params:scim:api:oracle:idcs:extension:messages:Error": {
    "messageId": "error.ssocommon.auth.invalidPasscode"
  }
}