本文へジャンプします。

ニフクラ ユーザーガイド

クラウド トップ>ユーザーガイド>IoTデバイスハブ>ユーザーアカウントと認証の処理

ユーザーアカウントと認証の処理

IoTデバイスハブでプロジェクトを作成するとき、ユーザーアカウントの登録・認証に、IoTデバイスハブに組み込まれたユーザーアカウントシステムを利用することができます。

選択可能なオプションは、下記の2つです。

ユーザーは電話番号を使用してログインします。 ユーザーは、携帯電話番号を使って登録を行い、SMSテキストで送信される認証コードを使ってログインします。
ユーザーはメールアドレスを使用してログインします。 ユーザーは、メールアドレスで登録を行い、パスワードを使ってログインします。

初めてプロジェクトを作成するときに、どちらかのオプションを選択する必要があります。用途に合わせて最適なオプションを選択してください。

プロジェクトの作成後に、選択したオプションを変更することはできないので注意してください。
間違ったオプションを選択した場合は、プロジェクトを削除して新しいプロジェクトを作成してください。

マイプロジェクト

組み込みのユーザーアカウントシステムを使用せず、プロジェクトを別のアカウントシステムに統合することもできます。
詳しくは、下記ページをご覧ください。

このチュートリアルでは、「電話番号オプション」と「メールアドレスオプション」を選択した場合に、アカウントシステムがどのように動作するかを説明します。

電話番号オプション

ユーザーがプロジェクトを操作するとき、モバイルアプリを主な手段として使用する場合、ユーザーアカウントシステムにこのオプションの利用を検討することできます。

ユーザーは電話番号を使用してアカウントを登録します。
ログインするには、SMSで携帯電話に認証コードを送信するようリクエストします。

認証コードが届いたら、そのコードを使って認証できます。
パスワードは必要ありません。

具体的には、アプリに次のユーザーフローを実装する必要があります。

ユーザー登録

新しいユーザーを登録するには、名前と携帯電話番号を入力するようアプリで促す必要があります。

これによりアプリは、IoTデバイスハブ APIの/usersエンドポイントに対してPOSTリクエストを行って、プロジェクト内に新しいユーザーを作成することができます。

次のcURLの例のように、リクエストの本文にnameフィールドとphoneNumberフィールドが含まれている必要があります。
(PROJECT_IDは実際のプロジェクトIDに置き換えてください。また、PHONE_NUMBERは実際の電話番号に置き換えてください。例:+8108012345678)

$ curl -i -H "Content-Type: application/json" -d '{"projectId": PROJECT_ID, "name": "nifty", "phoneNumber": "PHONE_NUMBER"}' https://iot-device.jp-east-1.api.cloud.nifty.com/users

リクエストが成功すると、レスポンスは次のようになり、ワンタイム認証コードが記載されたSMSテキストがユーザーの電話に自動的に送信されます。
このコードを入力し、自身を認証してログインするよう、アプリでユーザーに促す必要があります。これについては次のセクションで説明します。

HTTP/1.1 201 Created
Access-Control-Allow-Credentials: false
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Xsrf-Guard
Content-Type: application/json; charset=utf-8
Location: /users/14
Date: Sun, 26 Jun 2016 06:31:58 GMT
Content-Length: 135

{"id":14,"projectId":PROJECT_ID,"phoneNumber":"PHONE_NUMBER","verified":false,"name":"nifty","creationTime":"2016-06-26T15:31:57.101+09:00" }
ユーザー認証

ユーザーを認証するには、アプリからIoTデバイスハブ APIの/auth/userエンドポイントに対してPOSTリクエストを行う必要があります。

次に示すように、リクエストの本文に、ユーザーの電話番号とSMSで送信された認証コードが含まれている必要があります。
(PROJECT_IDとAPP_IDは実際のプロジェクトIDとアプリIDに置き換えてください。また、PHONE_NUMBERは実際の電話番号に置き換えてください。例:%2B8108012345678)

$ curl -i -d "projectId=PROJECT_ID&appId=APP_ID&phoneNumber=PHONE_NUMBER&code=999999" https://iot-device.jp-east-1.api.cloud.nifty.com/auth/user

レスポンスは次のようになります。ここで、API_KEYはユーザーに割り当てられたAPIキーです。

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: false
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Xsrf-Guard
Content-Type: application/json; charset=utf-8
Date: Sun, 26 Jun 2016 06:41:39 GMT
Content-Length: 104

{"token": "API_KEY", "userId":77}

このAPIキーとユーザーIDを、アプリで保存する必要があります。
APIキーは、ユーザーセッションに関連付けられているため、それ以降にIoTデバイスハブ APIを呼び出すときは、常に、Authorization HTTPヘッダーで使用する必要があります。

前述のように、登録後すぐに認証コードが自動的にユーザーに送信されます。
既存ユーザーの場合は、新しいコードをユーザーに送信するようリクエストすることにより、アプリは認証プロセスを開始することができます。

次に示すように、/auth/user/smsエンドポイントに対するPOSTリクエストによって行います。

$ curl -i -d "projectId=PROJECT_ID&phoneNumber=PHONE_NUMBER" https://iot-device.jp-east-1.api.cloud.nifty.com/auth/user/sms

メールアドレスオプション

このオプションは、多くのWebサービスで使用されている一般的なユーザー登録・認証を提供します。

ユーザーはそれぞれ、アカウントの登録時にメールアドレスを入力してパスワードを選択し、 送信された確認メールに記載されたリンクをクリックして、メールアドレスを確認します。

ログインするには、自分のパスワードを使用します。アプリは、次のユーザーフローを処理する必要があります。

ユーザー登録

新しいユーザーを登録するには、名前、メール、、パスワードを入力するようアプリで促す必要があります。

これにより、アプリは、IoTデバイスハブ APIの/usersエンドポイントに対してPOSTリクエストを行って、プロジェクト内に新しいユーザーを作成できます。

次のcURLの例に示すように、リクエストの本文にnameフィールド、emailフィールド、passwordフィールドが含まれている必要があります。
(PROJECT_IDは実際のプロジェクトIDに置き換えてください。)

$ curl -i -H "Content-Type: application/json" -d '{"projectId": PROJECT_ID, "name": "nifty", "email": "nifty@example.com", "password": "xxxxxxxxx"}' https://iot-device.jp-east-1.api.cloud.nifty.com/users

リクエストが成功すると、レスポンスは次のようになり、確認リンクが記載されたメールがユーザーに送信されます。
ユーザーは、この確認リンクをクリックしないと自分のアカウントにログインできません。

HTTP/1.1 201 Created
Access-Control-Allow-Credentials: false
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Xsrf-Guard
Content-Type: application/json; charset=utf-8
Location: /users/15
Date: Sun, 26 Jun 2016 06:50:10 GMT
Content-Length: 142

{"id":15,"projectId":PROJECT_ID,"email":"nifty@example.com","verified":false,"name":"nifty","creationTime":"2016-06-26T15:50:10.913+09:00"}
パスワードのセキュリティについて

パスワード認証に依存するすべてのシステムと同じように、ユーザーが入力したパスワードをアプリでテストし、短すぎるパスワードや容易に推測できるパスワードは拒否する必要があります。

確認メールの再送

何らかの理由でユーザーが確認メールを紛失した場合、/auth/user/emailVerification/startエンドポイントに対してPOSTリクエストを行うことで、再送することができます。

ユーザー認証

ユーザーを認証するには、アプリからIoTデバイスハブ APIの/auth/userエンドポイントに対してPOSTリクエストを行う必要があります。

次に示すように、リクエストの本文にユーザーのメールアドレスとパスワードが含まれている必要があります。
(PROJECT_IDとAPP_IDは実際のプロジェクトIDとアプリIDに置き換えてください。)

$ curl -i -d "projectId=PROJECT_ID&appId=APP_ID&email=nifty@example.com&password=xxxxxxxxx" https://iot-device.jp-east-1.api.cloud.nifty.com/auth/user

パスワードが正しい場合、レスポンスは次のようになります。
API_KEYはユーザーに割り当てられたAPIキーです。APIキーとユーザーIDは、アプリで保存する必要があります。
APIキーはユーザーセッションに関連付けられているため、それ以降に、IoTデバイスハブ-APIを呼び出すときは、常にAuthorization HTTPヘッダーで使用する必要があります。

HTTP/1.1 200 OK
Access-Control-Allow-Credentials: false
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: X-Xsrf-Guard
Content-Type: application/json; charset=utf-8
Date: Sun, 26 Jun 2016 06:54:24 GMT
Content-Length: 104

{"token": "API_KEY", "userId": 77}
パスワードのリセット

ユーザーがパスワードを忘れた場合、そのユーザーへパスワードリセット用のメールを送信するようアプリからリクエストすることができます。

次に示すように、これは/auth/user/passwordReset/startエンドポイントに対するPOSTリクエストによって行います。

これにより、パスワードリセット用のリンクが記載されたメールがユーザーに送信されます。
ユーザーがリンクをクリックするとWebページが開き、そこで新しいパスワードを保存できます。

ログアウト

ユーザーがアプリからログアウトした場合、アプリはその状態をリセットして、ユーザーセッションに割り当てられたAPIキーを破棄する必要があります。

ただし、キーを破棄する前に、明示的にユーザーセッションを終了することを推奨します。
これは、IoTデバイスハブ-APIの/userSessionエンドポイントに対するDELETEリクエストによって行います。

SMS/メールメッセージのカスタマイズ

ユーザーアカウントと認証を処理するときには、SMSテキストやメールでユーザーに連絡する必要があります。

IoTデバイスハブでは、これらのメッセージの内容をユーザーに合わせてカスタマイズすることができます。

プロジェクトで電話番号ベースのアカウントを使用する場合

認証時にユーザーに送信するSMSテキストで使用するテンプレートを変更することができます。

コントロールパネルのプロジェクトの「設定」で、「ユーザー認証メッセージ」セクションを表示します。

ユーザー認証メッセージ

右上にある編集アイコンをクリックして、内容を変更します。

テンプレートでは、{{CODE}}などの変数を確認することができます。
この変数は、メッセージの送信時に自動的に認証コードに置き換えられます。

プロジェクトでメールアドレスベースのアカウントを使用する場合

アカウントの確認、パスワードリセットなどのためにユーザーに送信されるさまざまなメールメッセージで使用するテンプレートを変更できます。

コントロールパネルのプロジェクトの「設定」で、「メールテンプレート」セクションを表示します。

メールテンプレート

このセクションで、内容を変更したいエントリーを選択して、テンプレートの内容を表示します。
例えば、「ユーザー認証」を選択すると、新しいユーザーの登録時に送信されるメッセージのテンプレートが表示されます。

メッセージテンプレート

テンプレートの内容を変更するには、「メッセージ」セクションの右上にある編集アイコンをクリックします。

テンプレートでは、{{USER_NAME}}、{{USER_EMAIL}}などの変数を確認することができます。
これらの変数は、メールの送信時に適切な値に置き換えられます。

ユーザー認証用テンプレート、パスワードリセット用テンプレートの両方に、受信者がクリックして関連する操作を完了できるリンクを含める必要があります。

デフォルトでは、IoTデバイスハブによってホストされているWebページへのリンクが記述されています。

プロジェクトのUXを全面的にカスタマイズするには、これらのリンクを独自のWebページやアプリを指すURLに置き換える必要があります。
(ただし、必ず、必要なトークンパラメーターをURLに含めてください。)

独自のバージョンを実装可能かを確認するには、デフォルトのテンプレートで参照されているWebページのソースコードを調べてください。

推奨画面サイズ 1024×768 以上