コンテンツにスキップ

シングルサインオン(SSO)仕様と実装ガイド

  • 対応バージョン: learningBOX 2.5.2 以降
  • プロトコル: HTTPS
  • ドメイン: お客様の運用ドメイン(例: lms.learningbox.online)
  • HTTPメソッド: GET, POST(action=sso 以外のパラメータは POST を推奨)
  • エンドポイント: https://{tenant-domain}/?action=sso

概要

  • 利用用途: learningBOX へのログインを行います。
  • エンドポイント: ?action=sso
  • メソッド: GET/POST(セキュリティとURL長、Referrer露出抑止の観点から、action 以外は POST 推奨)
  • 備考: リクエストパラメータが複数設定されている場合は AND 検索(評価)となります。

必須パラメータ

パラメータ 説明
login string ログインID tatsuno-user1
sco_id number 教材(またはフォルダ)内部ID。ログインのみを行いたい場合は 0 を指定 0
time number 現在時刻(UNIXタイム、秒) 1542088980
key string ログイン認証キー (下記参照)

login の詳細

使用可能文字は半角英数字、および以下の記号のみです:

記号 名称
! エクスクラメーションマーク
" ダブルクォーテーション
# シャープ
$ ドル記号
% パーセント
& アンパサンド
' シングルクォーテーション
( 左括弧
) 右括弧
* アスタリスク
+ プラス
, カンマ
- ハイフン
. ピリオド
/ スラッシュ
: コロン
; セミコロン
< 小なり
= イコール
> 大なり
? クエスチョンマーク
[ 左角括弧
] 右角括弧
^ キャレット
_ アンダースコア
` バッククォート

注意: @(アットマーク)は使用できません。

上記以外の文字を使用した場合は利用不可(SSO Error 224 が表示されます)

key の詳細

生成式: sha256(login + "/" + secret + "/" + sco_id + "/" + time)

PHP例:

$key = hash('sha256', $login.'/'.$secret.'/'.$sco_id.'/'.$time);


オプションパラメータ

アカウント設定

パラメータ 説明
add_account number アカウント追加設定
email string メールアドレス
name string 氏名
nickname string ディスプレイネーム
status number ステータス

add_account の詳細

動作
0 アカウントが存在しない場合はエラーコード200を返す。存在する場合はそのままログイン
1 アカウントが存在しない場合は作成してログイン。存在する場合はそのままログイン

email / name / nickname の詳細

これらのパラメータは以下の共通動作をします: - 渡されない場合: 更新しない - 渡された場合: アカウントが存在する場合は更新、存在しない場合はこの値で登録

使用禁止文字: - name: \(SSO Error 225) - nickname: \(SSO Error 226)

status の詳細

意味
0 未有効化
7 有効
  • 初回作成時: 値を渡されない場合は 7(有効)で登録
  • 既存アカウント: 0 を渡しても 7(有効)のまま変更しない

グループ管理

パラメータ 説明
add_group string グループ内部ID(group_id)でのグループ追加
add_group_code string グループコード(group_code)でのグループ追加
release_group string グループ内部ID(group_id)でのグループ削除
release_group_code string グループコード(group_code)でのグループ削除

共通仕様

  • 複数指定する場合はカンマ区切り(例: 22,23,24
  • add_group_code を指定した場合、add_group は無視される
  • release_group_code を指定した場合、release_group は無視される
  • 所属できないグループ: オーナーIDが違う、商品グループである

権限管理

パラメータ 説明 形式
permission_score string 成績管理権限(内部ID) グループID:教材ID:権限
permission_score_code string 成績管理権限(コード) グループコード:教材コード:権限
permission_group string ユーザー管理権限(内部ID) グループID:権限
permission_group_code string ユーザー管理権限(コード) グループコード:権限
permission_contents string コンテンツ管理権限(内部ID) 教材ID:権限
permission_contents_code string コンテンツ管理権限(コード) 教材コード:権限
permission_assign string コンテンツ割当管理権限(内部ID) グループID:教材ID:権限
permission_assign_code string コンテンツ割当管理権限(コード) グループコード:教材コード:権限

権限の種類

権限種別 指定可能な権限値
成績管理権限 none(権限なし), edit(編集), view(閲覧), scoring(採点), approve_scoring(成績承認)
ユーザー管理権限 none(権限なし), edit(編集), view(閲覧)
コンテンツ管理権限 none(権限なし), edit(編集), view(閲覧)
コンテンツ割当管理権限 none(権限なし), edit(編集)

権限解除

成績管理権限の解除には以下の値を使用: edit_none, view_none, scoring_none, approve_scoring_none

全権限の設定

  • 成績管理権限: -1:-1:edit で全ての成績に対して管理権限を設定
  • ユーザー管理権限: -1:edit で全てのグループを変更可能
  • コンテンツ管理権限: -1:edit で全てのフォルダの教材を変更可能
  • コンテンツ割当管理権限: -1:-1:edit で全てのグループ・教材に対して管理権限を設定

優先順位

コード指定のパラメータ(*_code)を指定した場合、対応する内部ID指定のパラメータは無視されます。

使用例

permission_score=23:5444:edit,23:5446:view
permission_score_code=1kumi:sansuu:edit,1kumi:kokugo:edit
permission_group=23:edit,24:view
permission_group_code=1kumi:edit,2kumi:edit
permission_contents=5444:edit,5446:view
permission_contents_code=sansuu:edit,kokugo:view
permission_assign=23:5444:edit,23:5446:edit
permission_assign_code=1kumi:sansuu:edit,1kumi:kokugo:edit

有効期限

パラメータ 説明
expiration_date string アカウントの有効期限日(形式: YYYY-MM-DD
expiration_from_creation number アカウント作成日からの有効期限日数
expiration_from_login number ログイン日からの有効期限日数

優先順位

  1. expiration_date が設定されている場合、他のパラメータは無視される
  2. expiration_from_creation が設定されている場合、expiration_from_login は無視される
  3. expiration_from_login は上記が設定されていない場合のみ有効

使用例

expiration_date=2022-02-02
expiration_from_creation=30
expiration_from_login=7

商品・課金

パラメータ 説明
add_product string 自動購入させる商品の内部ID
add_product_key string 自動購入させる商品のプロダクトキー
subscription string アカウント課金の有無

add_product の詳細

  • 形式: 商品コード:数量単位(例: P0001:1D,P0002:2W,P0003:3M,P0004:4Y
  • EC機能をご利用中で、決済方法「無料決済」が有効な場合のみ有効
  • 自動購入済みの商品は再購入しない
単位 意味 範囲
D 1~90日
W 1~52週
M 1~24ヶ月
Y 1~5年

add_product_key の詳細

  • add_product を指定した場合は必須
  • 生成式: sha256(add_product + "/" + secret)

subscription の詳細

意味
required 課金する
none プラン契約を行っていないユーザーに対する課金対象フラグの解除

遷移先

パラメータ 説明
sco_code string コンテンツコード。ログイン先のフォルダ・教材のコンテンツコード。sco_id=0 の場合のみ有効
url string 遷移先URL
scene_code string シーンコード

sco_code の詳細

  • sco_id=0 の場合のみ有効
  • ログインだけ行いたい場合は指定しない
  • 例: QUIZ001

url の詳細

  • 指定された場合、そのURLへ遷移
  • sco_idsco_code より優先される

scene_code の詳細

  • ログイン後のシーンのシーンコードを指定
  • 存在しないシーンコードの場合、SSO Error 124

ユーザー属性

パラメータ 説明
lms_country string 居住国(国名を英語表記で指定)
lms_language string 言語(ロケールコードで指定)
lms_timezone string タイムゾーン(IANAタイムゾーン識別子で指定)

lms_country の詳細

国名を英語表記で指定します(例: Japan, UnitedStatesOfAmerica

全ての居住国一覧(クリックで展開)
国名
Japan日本
Afghanistanアフガニスタン
Albaniaアルバニア
Algeriaアルジェリア
Andorraアンドラ
Angolaアンゴラ
AntiguaAndBarbudaアンチグア・バーブーダ
Argentinaアルゼンチン
Armeniaアルメニア
Australiaオーストラリア
Austriaオーストリア
Azerbaijanアゼルバイジャン
Bahamasバハマ
Bahrainバーレーン
Bangladeshバングラデシュ
Barbadosバルバドス
Belarusベラルーシ
Belgiumベルギー
Belizeベリーズ
Beninベナン
Bhutanブータン
Boliviaボリビア
BosniaAndHerzegovinaボスニア・ヘルツェゴビナ
Botswanaボツワナ
Brazilブラジル
BruneiDarussalamブルネイ
Bulgariaブルガリア
BurkinaFasoブルキナファソ
Burundiブルンジ
CaboVerdeカーボベルデ
Cambodiaカンボジア
Cameroonカメルーン
Canadaカナダ
CentralAfricanRepublic中央アフリカ共和国
Chadチャド
Chileチリ
China中国
Colombiaコロンビア
Comorosコモロ
Congoコンゴ
CostaRicaコスタリカ
CoteD'Ivoireコートジボアール
Croatiaクロアチア
Cubaキューバ
Cyprusキプロス
CzechRepublicチェコ
DemocraticPeople'sRepublicOfKorea朝鮮民主主義人民共和国
DemocraticRepublicOfTheCongoコンゴ民主共和国
Denmarkデンマーク
Djiboutiジブチ
Dominicaドミニカ
DominicanRepublicドミニカ共和国
Ecuadorエクアドル
Egyptエジプト
ElSalvadorエルサルバドル
EquatorialGuinea赤道ギニア
Eritreaエリトリア
Estoniaエストニア
Eswatiniエスワティニ
Ethiopiaエチオピア
Fijiフィジ-
Finlandフィンランド
Franceフランス
Gabonガボン
Gambiaガンビア
Georgiaジョージア
Germanyドイツ
Ghanaガーナ
Greeceギリシャ
Grenadaグレナダ
Guatemalaグアテマラ
Guineaギニア
GuineaBissauギニアビサウ
Guyanaガイアナ
Haitiハイチ
Hondurasホンジュラス
Hungaryハンガリ-
Icelandアイスランド
Indiaインド
Indonesiaインドネシア
Iranイラン(回教共和国)
Iraqイラク
Irelandアイルランド
Israelイスラエル
Italyイタリア
Jamaicaジャマイカ
Jordanヨルダン
Kazakhstanカザフスタン
Kenyaケニア
Kiribatiキリバス
Kuwaitクウェート
Kyrgyzstanキルギスタン
LaoPeople'sDemocraticRepublicラオス人民民主共和国
Latviaラトビア
Lebanonレバノン
Lesothoレソト
Liberiaリベリア
Libyaリビア
Liechtensteinリヒテンシュタイン
Lithuaniaリトアニア
Luxembourgルクセンブルク
Madagascarマダガスカル
Malawiマラウィ
Malaysiaマレーシア
Maldivesモルディブ
Maliマリ
Maltaマルタ
MarshallIslandsマーシャル諸島
Mauritaniaモーリタニア
Mauritiusモーリシャス
Mexicoメキシコ
Micronesiaミクロネシア連邦
Monacoモナコ
Mongoliaモンゴル
Montenegroモンテネグロ
Moroccoモロッコ
Mozambiqueモザンビーク
Myanmarミャンマー
Namibiaナミビア
Nauruナウル
Nepalネパール
Netherlandsオランダ
NewZealandニュージーランド
Nicaraguaニカラグア
Nigerニジェール
Nigeriaナイジェリア
NorthMacedonia北マケドニア
Norwayノルウェー
Omanオマーン
Pakistanパキスタン
Palauパラオ
Panamaパナマ
PapuaNewGuineaパプア・ニューギニア
Paraguayパラグアイ
Peruペル-
Philippinesフィリピン
Polandポーランド
Portugalポルトガル
Qatarカタール
RepublicOfKorea韓国
RepublicOfMoldovaモルドバ
Romaniaルーマニア
RussianFederationロシア連邦
Rwandaルワンダ
SaintKittsAndNevisセントクリストファー・ネイビス
SaintLuciaセントルシア
SaintVincentAndTheGrenadinesセントビンセントおよびグレナディーン諸島
Samoaサモア
SanMarinoサンマリノ
SaoTomeAndPrincipeサントメ・プリンシペ
SaudiArabiaサウジアラビア
Senegalセネガル
Serbiaセルビア
Seychellesセイシェル
SierraLeoneシエラレオネ
Singaporeシンガポール
Slovakiaスロバキア
Sloveniaスロベニア
SolomonIslandsソロモン諸島
Somaliaソマリア
SouthAfrica南アフリカ
SouthSudan南スーダン
Spainスペイン
SriLankaスリランカ
Sudanスーダン
Surinameスリナム
Swedenスウェーデン
Switzerlandスイス
SyrianArabRepublicシリア
Tajikistanタジキスタン
Thailandタイ
Timor-Leste東ティモール
Togoトーゴ
Tongaトンガ
TrinidadAndTobagoトリニダード・トバゴ
Tunisiaチュニジア
Turkeyトルコ
Turkmenistanトルクメニスタン
Tuvaluツバル
Ugandaウガンダ
Ukraineウクライナ
UnitedArabEmiratesアラブ首長国連邦
UnitedKingdomOfGreatBritainAndNorthernIreland英国
UnitedRepublicOfTanzaniaタンザニア
UnitedStatesOfAmerica米国
Uruguayウルグアイ
Uzbekistanウズベキスタン
Vanuatuバヌアツ
Venezuelaベネズエラ
VietNamベトナム
Yemenイエメン
Zambiaザンビア
Zimbabweジンバブエ

lms_language の詳細

ロケールコードで指定します。

言語
ja_JP 日本語
en_US 英語
vi_VN ベトナム語
id_ID インドネシア語
de_DE ドイツ語
es_ES スペイン語
fr_FR フランス語
my_MM ミャンマー語
pt_PT ポルトガル語
tl_PH タガログ語
ru_RU ロシア語
ur_PK ウルドゥー語
hi_IN ヒンディー語
th_TH タイ語
km_KH クメール語
zh_CN 中国語(簡体字)
zh_TW 中国語(繁体字)
ko_KR 韓国語

lms_timezone の詳細

IANAタイムゾーン識別子で指定します。

タイムゾーン
Asia/Tokyo 東京標準時 (UTC+09:00)
Europe/Budapest 中央ヨーロッパ標準時 (UTC+01:00)
Africa/Lagos 西中央アフリカ標準時 (UTC+01:00)
Europe/Amsterdam 西ヨーロッパ標準時 (UTC+01:00)
Europe/Paris ロマンス標準時 (UTC+01:00)
Africa/Windhoek ナミビア標準時 (UTC+01:00)
Africa/Harare 南アフリカ標準時 (UTC+02:00)
Europe/Helsinki FLE標準時 (UTC+02:00)
Europe/Sofia E.ヨーロッパ標準時 (UTC+02:00)
Africa/Cairo エジプト標準時 (UTC+02:00)
Europe/Bucharest GTB標準時 (UTC+02:00)
Asia/Jerusalem イスラエル標準時 (UTC+02:00)
Asia/Amman ヨルダン標準時 (UTC+02:00)
Asia/Beirut 中東標準時 (UTC+02:00)
Asia/Damascus シリア標準時 (UTC+02:00)
Europe/Istanbul トルコ標準時 (UTC+02:00)
Asia/Kuwait アラブ標準時 (UTC+03:00)
Europe/Minsk ベラルーシ標準時 (UTC+03:00)
Africa/Nairobi E.アフリカ標準時 (UTC+03:00)
Asia/Baghdad アラビック標準時 (UTC+03:00)
Europe/Moscow ロシア標準時 (UTC+03:00)
Asia/Tehran イラン標準時 (UTC+03:30)
Asia/Yerevan コーカサス標準時 (UTC+04:00)
Asia/Baku アゼルバイジャン標準時 (UTC+04:00)
Asia/Tbilisi アラビア標準時 (UTC+04:00)
Asia/Kabul アフガニスタン標準時 (UTC+04:30)
Asia/Ashgabat 西アジア標準時 (UTC+05:00)
Asia/Karachi パキスタン標準時 (UTC+05:00)
Asia/Kolkata インド標準時 (UTC+05:30)
Asia/Colombo スリランカ標準時 (UTC+05:30)
Asia/Kathmandu ネパール標準時 (UTC+05:45)
Asia/Dhaka 中央アジア標準時 (UTC+06:00)
Asia/Yangon ミャンマー標準時 (UTC+06:30)
Asia/Bangkok 東南アジア標準時 (UTC+07:00)
Asia/Singapore シンガポール標準時 (UTC+08:00)
Asia/Taipei 台北標準時 (UTC+08:00)
Asia/Hong_Kong 香港標準時 (UTC+08:00)
Asia/Shanghai 中国標準時 (UTC+08:00)
Asia/Macau マカオ標準時 (UTC+08:00)
Asia/Ulaanbaatar ウランバートル標準時 (UTC+08:00)
Asia/Seoul 韓国標準時 (UTC+09:00)
Australia/Melbourne オーストラリア東部標準時 (UTC+10:00)
Pacific/Guam 西太平洋標準時 (UTC+10:00)
Pacific/Noumea 中央太平洋標準時 (UTC+11:00)
Pacific/Auckland ニュージーランド標準時 (UTC+12:00)
Pacific/Apia サモア標準時 (UTC+13:00)
America/Argentina/Buenos_Aires アルゼンチン標準時 (UTC-03:00)
America/Sao_Paulo E.南アメリカ標準時 (UTC-03:00)
America/Santiago 太平洋南アメリカ標準時 (UTC-03:00)
America/Cayenne 南アメリカ東部標準時 (UTC-03:00)
America/Montevideo モンテビデオ標準時 (UTC-03:00)
America/Manaus 南アメリカ西部標準時 (UTC-04:00)
America/Asuncion パラグアイ標準時 (UTC-04:00)
America/Bogota 南アメリカ太平洋標準時 (UTC-05:00)
America/Mexico_City 中部標準時(メキシコ) (UTC-06:00)
America/Phoenix 山地標準時 (UTC-07:00)
America/Vancouver 太平洋標準時 (UTC-08:00)
Pacific/Honolulu ハワイ標準時 (UTC-10:00)
UTC グリニッジ標準時 (UTC)

カスタムフィールド

パラメータ 説明
{custom_field_key} string カスタムフィールドのキー名をパラメータ名として指定

使用方法

カスタムフィールドのキー名をそのままパラメータ名として使用します。

使用禁止文字: \(SSO Error 227)

入力形式による制約

入力形式 制約
テキスト形式 50文字まで
テキストエリア形式 1000文字まで
ラジオボタン・プルダウン・チェックボックス 値として設定されている文字列を連携
日付 Y-m-d 形式(例: 2022-01-17)または j-F-Y 形式(例: 17-January-2022

レスポンス

正常系(302 Found)

認証成功時は HTTP 302 Found でリダイレクトします。

条件 リダイレクト先
sco_id=0 マイページ /sys/index.php
sco_id=フォルダ 学習画面 /sys/index.php?action=courseAll&current-folder={sco_id}
sco_id=コンテンツ 受講画面(例: /sys/index.php?action=quizPlayer&options=...
url 指定あり 指定の遷移先(例: /sys/?action=courseAll
パラメータ不足 トップ画面 /index.php

異常系(エラー)

サーバーエラー(500系)

HTTPステータス 説明
500 Internal Server Error DBエラー等のサーバー内部エラー

クライアントエラー(400系)

パラメータエラーの場合、エラーページが表示されます。

既存アカウントにログインする際のパラメータエラー
コード エラー名 内容
001 SSO Error 001 loginユーザが存在しない
002 SSO Error 002 timeが15時間オーバー
003 SSO Error 003 keyが不正
004 SSO Error 004 アカウント上限エラー
005 SSO Error 005 使用済みのキー
007 SSO Error 007 リファラーの不一致
008 SSO Error 008 独自SSOの利用未設定
009 SSO Error 009 グループ制限エラー
101 SSO Error 101 Email空文字エラー
102 SSO Error 102 Email形式エラー
103 SSO Error 103 Email重複エラー
104 SSO Error 104 氏名空文字エラー
105 SSO Error 105 氏名長超過(50文字まで)
106 SSO Error 106 ディスプレイネームが空白文字のみで構成されている場合のエラー
107 SSO Error 107 ディスプレイネームの長さ違反(3文字以上50文字以下)
109 SSO Error 109 不正なgroup_idの指定
110 SSO Error 110 不正なstatusの指定
111 SSO Error 111 指定したgroup_idまたはその親グループのアカウント登録数が上限に達している
112 SSO Error 112 permission_score_codeもしくはpermission_score:/で区切りでのカラム数不一致
113 SSO Error 113 permission_score_codeもしくはpermission_score:不適切なmode値
114 SSO Error 114 permission_score_codeもしくはpermission_score:グループ指定エラー
115 SSO Error 115 permission_score_codeもしくはpermission_score:教材指定エラー
116 SSO Error 116 permission_group_codeもしくはpermission_group:/で区切りでのカラム数不一致
117 SSO Error 117 permission_group_codeもしくはpermission_group:不適切なmode値
118 SSO Error 118 permission_group_codeもしくはpermission_group:グループ指定エラー
119 SSO Error 119 permission_contents_codeもしくはpermission_contents:/で区切りでのカラム数不一致
120 SSO Error 120 permission_contents_codeもしくはpermission_contents:不適切なmode値
121 SSO Error 121 permission_contents_codeもしくはpermission_contents:教材指定エラー
122 SSO Error 122 氏名に使用禁止文字「\」が含まれている
123 SSO Error 123 ディスプレイネームに使用禁止文字「\」が含まれている
124 SSO Error 124 存在しないscene_codeが指定された
125 SSO Error 125 Email256文字数超過エラー
126 SSO Error 126 Emailドメインチェックエラー
127 SSO Error 127 統合元ユーザーのステータスを無効以外に変更しようとした場合のエラー
アカウント登録時のパラメータエラー
コード エラー名 内容
203 SSO Error 203 Email空文字エラー
204 SSO Error 204 Email形式エラー
205 SSO Error 205 Email重複エラー
206 SSO Error 206 氏名空文字エラー
207 SSO Error 207 氏名長超過(50文字まで)
208 SSO Error 208 ディスプレイネームが空白文字のみで構成されている場合のエラー
209 SSO Error 209 ディスプレイネームの長さ違反(3文字以上50文字以下)
211 SSO Error 211 不正なgroup_idの指定
212 SSO Error 212 不正なstatusの指定
213 SSO Error 213 指定したgroup_idまたはその親グループのアカウント登録数が上限に達している
214 SSO Error 214 permission_score_codeもしくはpermission_score:/で区切りでのカラム数不一致
215 SSO Error 215 permission_score_codeもしくはpermission_score:不適切なmode値
216 SSO Error 216 permission_score_codeもしくはpermission_score:グループ指定エラー
217 SSO Error 217 permission_score_codeもしくはpermission_score:教材指定エラー
218 SSO Error 218 permission_group_codeもしくはpermission_group:/で区切りでのカラム数不一致
219 SSO Error 219 permission_group_codeもしくはpermission_group:不適切なmode値
220 SSO Error 220 permission_group_codeもしくはpermission_group:グループ指定エラー
221 SSO Error 221 permission_contents_codeもしくはpermission_contents:/で区切りでのカラム数不一致
222 SSO Error 222 permission_contents_codeもしくはpermission_contents:不適切なmode値
223 SSO Error 223 permission_contents_codeもしくはpermission_contents:教材指定エラー
224 SSO Error 224 ログインIDに使用禁止文字が含まれている
225 SSO Error 225 氏名に使用禁止文字「\」が含まれている
226 SSO Error 226 ディスプレイネームに使用禁止文字「\」が含まれている
227 SSO Error 227 カスタムフィールド(テキスト、テキストエリア)に使用禁止文字「\」が含まれている
228 SSO Error 228 permission_assign_codeもしくはpermission_assign:/で区切りでのカラム数不一致
229 SSO Error 229 permission_assign_codeもしくはpermission_assign:不適切なmode値
230 SSO Error 230 permission_assign_codeもしくはpermission_assign:グループ指定エラー
231 SSO Error 231 permission_assign_codeもしくはpermission_assign:教材指定エラー
232 SSO Error 232 ログインIDの長さ違反(5文字以上50文字以下)
233 SSO Error 233 Email256文字数超過エラー
234 SSO Error 234 Emailドメインチェックエラー
235 SSO Error 235 使用できないログインIDを使用しようとした
その他エラー
コード エラー名 内容
999 SSO Error 999 パスワード連携など

実装例(補足)

以下は仕様に基づく参考実装コードです。環境に合わせて調整してください。

GET の URL 生成(PHP)

<?php
declare(strict_types=1);

$endpoint = 'https://{tenant-domain}/'; // 末尾スラッシュ維持
$login    = 'user-123';
$sco_id   = 0;            // ログインのみは 0
$time     = time();
$secret   = 'YOUR_SHARED_SECRET';

$key = hash('sha256', $login . '/' . $secret . '/' . $sco_id . '/' . $time);

$params = [
  'action' => 'sso',
  'login'  => $login,
  'sco_id' => $sco_id,
  'time'   => $time,
  'key'    => $key,
  // 'sco_code' => 'QUIZ001', // sco_id=0 のときのみ有効
  // 'url'      => '/sys/?action=courseAll', // 任意
];

$query = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
header('Location: ' . $endpoint . '?' . $query);
exit;

POST のフォーム送信(PHP cURL)

<?php
declare(strict_types=1);

$endpoint = 'https://{tenant-domain}/';
$login  = 'user1';
$sco_id = 0;
$time   = time();
$secret = 'YOUR_SHARED_SECRET';

$key = hash('sha256', $login . '/' . $secret . '/' . $sco_id . '/' . $time);

$post = [
  'action' => 'sso',
  'login'  => $login,
  'sco_id' => $sco_id,
  'time'   => $time,
  'key'    => $key,
  // 任意フィールドは必要に応じて追加
];

$ch = curl_init($endpoint);
curl_setopt_array($ch, [
  CURLOPT_POST           => true,
  CURLOPT_POSTFIELDS     => http_build_query($post, '', '&', PHP_QUERY_RFC3986),
  CURLOPT_HEADER         => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_FOLLOWLOCATION => false,
]);
$res  = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);

echo "HTTP Status: {$info['http_code']}\n";
if (preg_match('/^Location:\s*(.+)$/mi', $res, $m)) {
  echo "Redirect To: " . trim($m[1]) . "\n";
}

POST(HTMLフォーム例)

<form method="post" action="https://{tenant-domain}/">
  <input type="hidden" name="action" value="sso" />
  <input type="hidden" name="login" value="user1" />
  <input type="hidden" name="sco_id" value="0" />
  <input type="hidden" name="time" value="1657896543" />
  <input type="hidden" name="key" value="e3b0c4..." />
  <button type="submit">SSO でログイン</button>
</form>

注意

  • 署名キー生成は「login/secret/sco_id/time」をそのままスラッシュで連結し、余分な空白を混入させないこと
  • GET はURLやログに露出しやすいため、POST を推奨