SaaS利用者(ユーザー)のアカウントについて
SaaSus Platformにおける、SaaS利用者(ユーザー)のアカウン トの扱いについて説明します。
1.アカウントの構成要素
アカウントは以下の要素で構成されており、全てを設定することで利用可能になります。
- SaaSユーザー
SaaSに対する認証情報(ID、パスワード)を保持 - テナントユーザー
SaaSユーザーがどのテナントに所属するかを保持 - 役割(ロール)
テナントユーザーがどの権限を持っているかを保持
2.リレーションについて
SaaSユーザーは複数のテナントに所属することが出来ます。
また、テナントの中で複数の役割を持つことが出来ます。
例)
ユーザーAはテナントAに所属しており、管理者の役割を持っている。
ユーザーAはテナントBにも所属しており、管理者と一般ユーザーの役割を持っている。
図で表現すると以下となります。
3.アカウント作成のパターンについて
- セルフサインアップするケース
例)
SaaSを利用したいと思ったユーザーが、セルフサインアップ画面から自分でアカウントを作成する。
アカウント作成時にテナントを作成し、そのテナントの管理者となる。 - SaaSにユーザー作成機能が実装されているケース
例)
テナントの管理者がユーザー作成機能を利用し、役割【管理者、一般ユーザー】を作成する。 - SaaS管理コンソールからアカウント作成するケース
例)
ユーザーからの申請を受けて、SaaS管理者がSaaS管理コンソールからアカウントを作成。
メールやEventBridge連携などでログイン情報をユーザーに通知し、ユーザーが利用を開始する。
3.1.セルフサインアップするケースの実装
3.1.1.ユーザーのセルフサインアップを許可します
SaaS 開発コンソール - 認証詳細設定 - 認証設定タブ - セルフサインアップ(ユーザー自身による新規登録)の可否
ユーザーが自分でユーザー登録可能を有効にします
セルフサインアップを許可すると、SaaSus Platformが生成するログイン画面に「新規登録はこちら」が表示されます
このリンクからユーザーがアカウントの作成をすることが出来ます。
ここで作成されるのはアカウントの構成要素における、SaaSユーザーが作成されます。
3.1.2.セルフサインアップ後の処理を実装する
セルフサインアップが完了すると、ユーザーはログイン状態でお客様のSaaSに遷移します。
※遷移先の画面
SaaS 開発コンソール - 認証後遷移先 - Callback URL
セルフサインアップを許可している場合、Callback URL において以下の判定を行う必要があります。
この判定は、SaaSus Platform から取得できる UserInfo配列内に tenants 情報が含まれているかどうかで確認できます。
- PHP
- Node.js
- Go
- Python
- Java
- C#(.Net8)
- C#(.Netfw4.8)
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if (empty($request->userinfo['tenants']))
const userInfo = request.userInfo
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if (!userInfo.tenants || userInfo.tenants.length === 0)
userInfo, ok := c.Get(string(ctxlib.UserInfoKey)).(*authapi.UserInfo)
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if len(userInfo.Tenants) == 0
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if not auth_user.tenants:
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if (userInfo.getTenants() == null || userInfo.getTenants().isEmpty())
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if (userInfo.Tenants == null || !userInfo.Tenants.Any())
// テナント登録がされていない場合は、セルフサインアップ処理を実施
if (userInfo.Tenants == null || !userInfo.Tenants.Any())
3.1.3.実装サンプル
テナントの作成を参考に、テナント情報が登録できるよう修正してみましょう。
テナント情報が登録できるようになったら、テナントにユーザーを紐づけロールを設定してみましょう。
テナントの作成とテナントユーザーの作成ができたら、UserInfo配列内の tenants に設定したテナント情報が出力されるか確認してみましょう。
- PHP
- Node.js
- Go
- Python
- Java
- C#(.Net8)
- C#(.Netfw4.8)
dd($request->userinfo['tenants']);
const userInfo = request.userInfo
console.log(userInfo.tenants)
fmt.Printf("Tenants: %+v\n", tenants)
print(auth_user.tenants)
UserInfo userInfo = null;
userInfo = userInfoApi.getUserInfo(getIDToken(request));
System.out.println(userInfo);
var authApiClientConfig = CreateClientConfiguration(c => c.GetAuthApiClientConfig(), context);
var userInfoApi = new UserInfoApi(authApiClientConfig);
var userInfo = await userInfoApi.GetUserInfoAsync(token);
Console.WriteLine(string.Join("\n", userInfo.Tenants.Select(tenant => tenant.ToString())));
var authApiClientConfig = CreateClientConfiguration(c => c.GetAuthApiClientConfig());
var userInfoApi = new UserInfoApi(authApiClientConfig);
var userInfo = await userInfoApi.GetUserInfoAsync(token);
foreach (var tenant in userInfo.Tenants)
{
Console.WriteLine(tenant.ToString());
}
テナント情報が取得でき、テナントユーザーが作成されていることができたら、通常のログインフローでログインができるか試してみましょう。
3.2.SaaSにユーザー作成機能が実装されているケースの実装
セルフサインアップした管理者がユーザーを作成するケースを実装してみましょう。
まずはSaaSにユーザー登録を行います。
- PHP
- Node.js
- Go
- Python
- Java
- C#(.Net8)
- C#(.Netfw4.8)
$client = new ApiClient();
$authApiClient = $client->getAuthClient();
$createSaasUserParam = new CreateSaasUserParam();
$createSaasUserParam
->setEmail($inputs['email'])
->setPassword($inputs['password']);
$authApiClient->createSaasUser($createSaasUserParam);
const client = new AuthClient()
const createSaasUserParam: CreateSaasUserParam = {
email,
password
}
await client.saasUserApi.createSaasUser(createSaasUserParam)
var authClient *authapi.ClientWithResponses
createSaasUserParam := authapi.CreateSaasUserJSONRequestBody{
Email: email,
Password: password,
}
_, err = authClient.CreateSaasUser(context.Background(), createSaasUserParam)
from saasus_sdk_python.src.auth import SaasUserApi, CreateSaasUserParam
api_client = SignedAuthApiClient()
create_saas_user_param = CreateSaasUserParam(email=email, password=password)
SaasUserApi(api_client=api_client).create_saas_user(create_saas_user_param=create_saas_user_param)
AuthApiClient apiClient = new Configuration().getAuthApiClient();
apiClient.setReferer(request.getHeader("Referer"));
CreateSaasUserParam createSaasUserParam = new CreateSaasUserParam().email(email).password(password);
saasUserApi.createSaasUser(createSaasUserParam);
var saasUserApi = new SaasUserApi(authApiClientConfig);
var createSaasUserParam = new CreateSaasUserParam(email, password);
await saasUserApi.CreateSaasUserAsync(createSaasUserParam);
var saasUserApi = new SaasUserApi(authApiClientConfig);
var createSaasUserParam = new CreateSaasUserParam(email, password);
await saasUserApi.CreateSaasUserAsync(createSaasUserParam);
SaaSにユーザー登録ができたら、登録者のUserInfo配列内の tenants からテナント情報を取得し、テナントにユーザ ーを紐づけロールを設定してみましょう。
3.3.SaaS管理コンソールからアカウント作成するケースの実装
準備中