Amazon Pinpoint でのワンタイムパスワード (OTPsの送信と検証 - Amazon Pinpoint

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon Pinpoint でのワンタイムパスワード (OTPsの送信と検証

Amazon Pinpoint には、ワンタイムパスワード (OTP) を管理する機能があります。この機能を使用して、新しいワンタイムパスワードを生成し、SMS メッセージとして受信者に送信できます。その後、アプリケーションは Amazon Pinpoint API を呼び出して、これらのパスワードを検証します。

重要

この機能を使用するには、アカウントに本番稼働用アクセスとアクティブな発信元 ID が必要です。詳細については、Amazon Pinpoint SMS ユーザーガイド」の「Amazon Pinpoint SMS サンドボックスについて」および「電話番号をリクエストする」を参照してください。 Amazon Pinpoint

一部の国や地域では、SMS メッセージを送信する前に、専用の電話番号または発信元 ID を取得する必要があります。例えば、米国の受信者にメッセージを送信する場合、専用の通話料無料の番号、10DLC 番号、またはショートコードが必要です。インドにいる受信者にメッセージを送信する場合、PEID (プリンシパル エンティティ ID) および テンプレート ID を含む送信者 ID を登録する必要があります。これらの要件は、OTP 機能を使用する際にも適用されます。

この機能を使用するには、OTP メッセージの送信と検証のためのアクセス許可が必要です。「ワンタイムパスワード」を参照してください。アクセス許可の決定についてサポートが必要な場合は、「Amazon Pinpoint Identity and Access Management のトラブルシューティング」を参照してください。

OTP メッセージの送信

Amazon Pinpoint API の SendOtpMessages オペレーションを利用して、アプリケーションのユーザーに OTP コードを送信できます。この API を使用すると、Amazon Pinpoint はランダムなコードを生成し、SMS メッセージとしてユーザーに送信します。リクエストには、次のパラメータを含めることができます。

  • Channel — OTP コードが送信される通信チャネル。現在、SMS メッセージのみがサポートされているため、許容される値は SMS のみです。

  • BrandName — OTP コードに関連するブランド名、会社名、商品名。この名前の長さは最大 20 文字です。

    注記

    Amazon Pinpointが OTP メッセージを送信する際、以下のメッセージテンプレートにブランド名が自動的に挿入されます。

    This is your One Time Password: {{otp}} from {{brand}}

    したがって、ブランド名 ExampleCorp として を指定し、Amazon Pinpoint が 123456 のワンタイムパスワードを生成すると、ユーザーに次のメッセージを送信します。

    This is your One Time Password: 123456 from ExampleCorp
  • CodeLength — 受信者に送信されるワンタイムコードの桁数 OTP コードは 5 桁から 8 桁の数字で構成されます。

  • ValidityPeriod — OTPコードが有効になる時間 (分) です。有効期間は 5 分から 60 分までです。

  • AllowedAttempts – 受信者が OTP の検証で失敗できる回数。試行回数がこの値を超えると、OTP は自動的に無効になります。試行回数の上限は 5 回です。

  • Language — メッセージを送信するときに使用する言語 (IETF BCP-47 形式)。許容値は次のとおりです。

    • de-DE – ドイツ語

    • en-GB – 英語 (英国)

    • en-US – 英語 (米国)

    • es-419 – スペイン語 (ラテンアメリカ)

    • es-ES – スペイン語

    • fr-CA – フランス語 (カナダ)

    • fr-FR – フランス語

    • it-IT – イタリア語

    • ja-JP – 日本語

    • ko-KR – 韓国語

    • pt-BR – ポルトガル語 (ブラジル)

    • zh-CN – 簡体字中国語

    • zh-TW – 繁体字中国語

  • OriginationIdentity – OTP コードの送信に使用される発信元 ID (ロングコード、ショートコード、送信者 ID など)。OTP 送信にロングコードまたは通話料無料を使用する場合、電話番号は E.164 形式である必要があります。

  • DestinationIdentity — OTP コードの送信先の電話番号 (E.164形式)。

  • ReferenceId — リクエストの一意の参照 ID。参照 ID は、OTP を検証するときに入力した参照 ID と完全に一致します。参照 ID は、1 文字以上 48 文字以下になります。

  • EntityId — 規制機関に登録されているエンティティ ID。このパラメータは現在、インドの受信者にメッセージを送信する場合にのみ使用されます。インドの受信者に送信しない場合は、このパラメータを省略できます。

  • TemplateId — 規制機関にテンプレートされているエンティティ ID。このパラメータは現在、インドの受信者にメッセージを送信する場合にのみ使用されます。インドの受信者に送信しない場合は、このパラメータを省略できます。

    注記

    インドの受信者にメッセージを送信するための要件の詳細については、「Amazon Pinpoint ユーザーガイド」の「インドの送信者 ID 登録プロセス」を参照してください。 Amazon Pinpoint

Amazon Pinpoint アカウントが OTP メッセージを送信するように適切に設定されていることを確認するには、 AWS CLI を使用してテストメッセージを送信できます。の詳細については AWS CLI、「 AWS Command Line Interface ユーザーガイド」を参照してください。

を使用してテスト OTP メッセージを送信するには AWS CLI、ターミナルで send-otp-message コマンドを実行します。

aws pinpoint send-otp-message --application-id 7353f53e6885409fa32d07cedexample --send-otp-message-request-parameters Channel=SMS,BrandName=ExampleCorp,CodeLength=5,ValidityPeriod=20,AllowedAttempts=5,OriginationIdentity=+18555550142,DestinationIdentity=+12065550007,ReferenceId=SampleReferenceId

上記のコマンドで、次の操作を行います。

  • 7353f53e6885409fa32d07cedexample をアプリケーション ID に置き換えます。

  • を会社名ExampleCorpに置き換えます。

  • 5 を、受信者に送信される OTP コードに含まれる桁数CodeLegthに置き換えます。

  • 20 を、OTP コードが有効である分単位の時間ValidityPeriodに置き換えます。

  • 5 を、受信者が OTP の検証に失敗した回数AllowedAttemptsに置き換えます。

  • +18555550142 を、OTP コードの送信に使用される発信元 ID OriginationIdentityに置き換えます。

  • +12065550007 を、OTP コードの送信先の電話番号DestinationIdentityに置き換えます。

  • SampleReferenceId の をリクエストの一意の参照 ID ReferenceIdに置き換えます。

SendOtpMessage 応答

OTP メッセージを正常に送信すると、次の例のようなレスポンスが表示されます。

{ "MessageResponse": { "ApplicationId": "7353f53e6885409fa32d07cedexample", "RequestId": "255d15ea-75fe-4040-b919-096f2example", "Result": { "+12065550007": { "DeliveryStatus": "SUCCESSFUL", "MessageId": "nvrmgq9kq4en96qgp0tlqli3og1at6aexample", "StatusCode": 200, "StatusMessage": "MessageId: nvrmgq9kq4en96qgp0tlqli3og1at6aexample" } } } }

OTP メッセージの認証

OTP コードを検証するには、VerifyOtpMessages API を呼び出します。リクエストには次のパラメータが含まれます。

  • DestinationIdentity — OTP コードの送信先の電話番号 (E.164形式)。

  • ReferenceId — OTP コードを受信者に送信したときに使用した参照 ID。参照 ID は完全に一致する必要があります。

  • Otp — 認証している OTP コード。

を使用して検証プロセスを AWS CLI テストできます。のインストールと設定の詳細については AWS CLI、「 AWS Command Line Interface ユーザーガイド」を参照してください。

を使用して OTP を検証するには AWS CLI、ターミナルで verify-otp-message コマンドを実行します。

aws pinpoint verify-otp-message --application-id 7353f53e6885409fa32d07cedexample --verify-otp-message-request-parameters DestinationIdentity=+12065550007,ReferenceId=SampleReferenceId,Otp=01234

上記のコマンドで、次の操作を行います。

  • 7353f53e6885409fa32d07cedexample をアプリケーション ID に置き換えます。

  • +12065550007 を、OTP コードの送信先の電話番号DestinationIdentityに置き換えます。

  • SampleReferenceId の をリクエストの一意の参照 ID ReferenceIdに置き換えます。この値は、リクエストの送信にReferenceID使用された と一致する必要があります。

  • 01234 を、 に送信された Otp Otpに置き換えますDestinationIdentity

VerifyOtpMessage 応答

VerifyOTPMessage API にリクエストを送信すると、VerificationResponse オブジェクトが返されます。これには 1 つのプロパティ、Valid が含まれています。参照 ID、電話番号、OTP のすべてが Amazon Pinpoint が期待する値と一致し、OTP が有効期限内であれば、Validtrue となり、それ以外は false となります。以下は、OTP 検証に成功した場合のレスポンスの例です。

{ "VerificationResponse": { "Valid": true } }

コードの例

SDK for Python (Boto3) を使って、OTP コードを送信および認証するためのコードの例を紹介します。

参照 ID を生成する

次の機能は、受信者の電話番号、受信者が OTP を受信する製品やブランド、リクエスト元 (例えば、サイトやアプリケーションのページ名など) から、受信者ごとに一意の参照 ID を生成するものです。OTP コードを認証するときは、検証を成功させるために同一の参照 ID を渡す必要があります。送信コードおよび検証コードの例では、いずれもこのユーティリティ関数を使用しています。

この関数は必須ではありませんが、OTP 送信および検証プロセスの範囲を特定のトランザクションに限定し、検証ステップ中に簡単に再送信できるようにするために使用すると便利です。任意の参照 ID を使用できます。これは基本的な例に過ぎません。ただし、このセクションの他のコード例は、この関数に依存しています。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import hashlib def generate_ref_id(destinationNumber,brandName,source): refId = brandName + source + destinationNumber return hashlib.md5(refId.encode()).hexdigest()

OTP コードの送信

次のコード例では、SDK for Python (Boto3) を使用して OTP コードを送信する方法を示しています。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import boto3 from botocore.exceptions import ClientError from generate_ref_id import generate_ref_id ### Some variables that are unlikely to change from request to request. ### # The AWS Region that you want to use to send the message. region = "us-east-1" # The phone number or short code to send the message from. originationNumber = "+18555550142" # The project/application ID to use when you send the message. appId = "7353f53e6885409fa32d07cedexample" # The number of times the user can unsuccessfully enter the OTP code before it becomes invalid. allowedAttempts = 3 # Function that sends the OTP as an SMS message. def send_otp(destinationNumber,codeLength,validityPeriod,brandName,source,language): client = boto3.client('pinpoint',region_name=region) try: response = client.send_otp_message( ApplicationId=appId, SendOTPMessageRequestParameters={ 'Channel': 'SMS', 'BrandName': brandName, 'CodeLength': codeLength, 'ValidityPeriod': validityPeriod, 'AllowedAttempts': allowedAttempts, 'Language': language, 'OriginationIdentity': originationNumber, 'DestinationIdentity': destinationNumber, 'ReferenceId': generate_ref_id(destinationNumber,brandName,source) } ) except ClientError as e: print(e.response) else: print(response) # Send a message to +14255550142 that contains a 6-digit OTP that is valid for 15 minutes. The # message will include the brand name "ExampleCorp", and the request originated from a part of your # site or application called "CreateAccount". The US English message template should be used to # send the message. send_otp("+14255550142",6,15,"ExampleCorp","CreateAccount","en-US")

OTP コードの認証

次のコードの例は、SDK for Python (Boto3) を使用して既に送信した OTP コードを検証する方法を示しています。認証のステップを成功させるためには、お客様のリクエストに、メッセージの送信に使用された参照 ID と完全に一致する参照 ID が含まれている必要があります。

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 import boto3 from botocore.exceptions import ClientError from generate_ref_id import generate_ref_id # The AWS Region that you want to use to send the message. region = "us-east-1" # The project/application ID to use when you send the message. appId = "7353f53e6885409fa32d07cedexample" # Function that verifies the OTP code. def verify_otp(destinationNumber,otp,brandName,source): client = boto3.client('pinpoint',region_name=region) try: response = client.verify_otp_message( ApplicationId=appId, VerifyOTPMessageRequestParameters={ 'DestinationIdentity': destinationNumber, 'ReferenceId': generate_ref_id(destinationNumber,brandName,source), 'Otp': otp } ) except ClientError as e: print(e.response) else: print(response) # Verify the OTP 012345, which was sent to +14255550142. The brand name ("ExampleCorp") and the # source name ("CreateAccount") are used to generate the correct reference ID. verify_otp("+14255550142","012345","ExampleCorp","CreateAccount")