SSO連絡先インターフェース
この記事では、メールアドレスまたはサードパーティのユーザーIDを使って連絡先をサインインする方法を説明します。これはサブアカウントSSOインターフェースと同じappIdとSecret Keyを使用しますが、URL、署名フィールド、ランディングページは異なります。サブアカウントの作成とロール設定はサブアカウントSSOインターフェースで行ってください。
概要
連絡先のメールアドレスまたはサードパーティのユーザーIDを送信します。SurveyMars が署名を確認し、その連絡先をサインインさせます。
- 連絡先がサブアカウントの場合、SurveyMars は returnUrl を開きます。returnUrl が省略されている場合は、アンケート一覧を開きます。
- 連絡先がサブアカウントでない場合、SurveyMars は returnUrl を無視し、連絡先のホームページを開きます。
使用例
- あなたのシステムにはすでに連絡先のメールアドレスまたはサードパーティのユーザーIDがあり、SurveyMars へパスワード不要でアクセスしたい。
- サブアカウントの連絡先は returnUrl に遷移します。その他の連絡先は returnUrl をスキップして連絡先ホームページに遷移します。
開始前に
1. メインアカウントでサインインし、マイアカウントから appId をコピーします。
2. サポートに連絡して Secret Key を有効化してもらいます。このキーはサーバー側でのみ使用してください。URL やフロントエンドのコードには入れないでください。
3. サーバー側で SHA256 署名を生成し、その後 GET でログインリンクを開きます。

リクエスト
メソッド: GET
| パラメータ | 必須 | 説明 |
| appId | はい | メインアカウントID。サブアカウントSSOインターフェースと同じ appId を使用します。 |
| 条件付き | 連絡先のメールアドレス。email または thirdUserId、またはその両方を指定してください。メインアカウントで空の連絡先メールアドレスが許可されていない場合、email は必須です。 | |
| thirdUserId | 条件付き | サードパーティのユーザーID。email または thirdUserId、またはその両方を指定してください。両方送信された場合、検証では email のみを使用します。thirdUserId は署名には含まれます。 |
| language | いいえ | プロンプトメッセージの言語。署名には含まれません。 |
| returnUrl | いいえ | サブアカウントがサインインした後に開くページです。SurveyMars はサブアカウントの連絡先に対してはこれに従い、それ以外では無視します。署名には含まれません。 |
| ts | はい | 1970-01-01 00:00:00 UTC からの秒数。60秒間有効です。URL の ts は署名で使用した ts と一致している必要があります。ユーザーがリンクを開こうとする直前に生成してください。 |
| sign | はい | 署名。sign は連結した平文 appId + email + thirdUserId + ts + Secret Key の小文字16進 SHA256 です。順序は厳密に一致していなければなりません。Secret Key はサーバー側でのみ連結し、ブラウザのアドレスバーに表示されてはなりません。下の「署名の作成」を参照してください。 |
署名の作成
署名ルール
1. 区切り文字なしで、署名対象フィールドを固定順に連結します:appId + email + thirdUserId + ts + Secret Key。email または thirdUserId が省略されている場合は、その位置に空文字列を使用します。フィールドを削除したり、プレースホルダーに置き換えたりしないでください。Secret Key はサーバー側でのみ連結し、ブラウザのアドレスバーに表示されてはなりません。
2. その文字列を SHA256 でハッシュし、小文字の16進値を sign として使用します。
3. language と returnUrl は署名に含めません。ステップ1のフィールドと順序のみを使用してください。
4. ts は 1970-01-01 00:00:00 UTC からの秒数です。60秒間有効です。ユーザーがリンクを開こうとする直前に ts と sign を生成し、URL には同じ ts を使用してください。URL エンコードによって署名に使用した元の値が変わってはいけません。
5. 連結した文字列を確認するには、LZL online SHA256 などの SHA256 ツールに貼り付けてください。本番環境では sign をサーバーで生成してください。Secret Key をブラウザに公開しないでください。
6. サブアカウントSSOの署名を再利用しないでください。その文字列は appId、email、userName、roleId、ts を使用します。このインターフェースでは userName と roleId は使用しません。
例:
http://surveymars.com/app/login/contact/verify?appId=TTeEB8&[email protected]&ts=1790760357&language=2&returnUrl=https://surveymars.com/app/usercenter&sign=26c0c7d9da5e38c61d4aeecb223336d7a259cad0b75c8ff912855421fd832a4e
メールアドレスとサードパーティのユーザーID
1. email と thirdUserId の少なくとも一方を送信してください。
2. 両方送信した場合、検証では email が使用され、thirdUserId は無視されます。署名では元の thirdUserId を維持し、URL に含めてもかまいません。
3. メインアカウントで空の連絡先メールアドレスが許可されていない場合、email は必須です。
4. この設定がオフの場合は、サポートに連絡して「空の連絡先メールアドレスを許可」を有効にしてください。有効化後は、メールアドレスなしで連絡先を追加できます。
連絡先の遷移先
1. サブアカウントの連絡先:SurveyMars は returnUrl を開きます。returnUrl が省略されている場合は、アンケート一覧を開きます。
2. その他の連絡先:SurveyMars は returnUrl を無視し、連絡先のホームページを開きます。
重要な注意事項
- Secret Key はサーバーに保持してください。ブラウザのアドレスバーには入れないでください。
- このインターフェースは連絡先をサインインさせます。サブアカウントを作成したり、サブアカウントのロールを設定したりはしません。
- email 内の @ などの文字は URL エンコードしてください。署名はエンコード後の値ではなく、元の値で行ってください。
よくある質問
これはサブアカウントSSOとどう違いますか?
サブアカウントSSOは /app/login/sso/verify を使用してサブアカウントを作成またはサインインさせます。連絡先サインインは、メールアドレスまたはサードパーティのユーザーIDを使って /app/login/contact/verify を使用します。署名フィールドが異なります。sign を再利用しないでください。
thirdUserId だけを送信できますか?
はい、メインアカウントで空の連絡先メールアドレスが許可されている場合は可能です。それ以外の場合は email が必要です。署名内では省略したフィールドに空文字列を使用してください。
email と thirdUserId の両方を送信しました。なぜサインインに email が使われるのですか?
両方存在する場合、検証では thirdUserId は無視され、メールアドレスで連絡先が照合されます。thirdUserId は署名には引き続き含まれます。
なぜサブアカウントでない連絡先は returnUrl をスキップしたのですか?
returnUrl は連絡先がサブアカウントの場合にのみ適用されます。それ以外では SurveyMars はこれを無視し、連絡先のホームページを開きます。
なぜ署名検証に失敗するのですか?
Secret Key を確認してください。appId、email、thirdUserId、ts、Secret Key をその順序で連結します。省略された email または thirdUserId には空文字列を使用してください。ts がまだ60秒以内であること、および URL エンコードによって元の値が変わっていないことを確認してください。language と returnUrl は含めないでください。
なぜ ts の期限切れがこんなに早いのですか?
本番環境では、ts はサーバー時刻から60秒以内である必要があります。ユーザーがリンクを開こうとする直前に ts と sign を生成してください。