シングルサインオンTips & Tricks ~ The Things StackとGoogle OpenID Connect 連携方法

The Things Stackは、シングルサインオン 用の**OpenID Connect**をサポートしています。このセクションでは、OpenIDプロバイダをThe Things Stackのデプロイメントに接続し、ユーザーが既存の認証情報でサインインできるようにする手順を説明します。

SingleSignOn_TTN.png

コマンドラインインターフェイスのみ
以下の説明では、コマンドラインインターフェイス(CLI)を使用します。

Installing the CLI | The Things Stack for LoRaWAN

要件

  1. Google や Amazon Cognito などの OpenID Connect プロバイダーへのアクセス
  2. The Things Stack デプロイメントへの管理者アクセス
  3. tti-lw-cli

OpenID Connect プロバイダーを構成する

まず、The Things Stack からのログイン要求を受け入れ、認証を The Things Stack デプロイメントのコールバック アドレスに転送するように OpenID Connect プロバイダーを構成する必要があります。

Things Stack には、OpenID Connect プロバイダーからの次のものが必要です。

・OpenID 検出アドレス
・クライアントID
・クライアントシークレット

また、OpenID Connect プロバイダー構成に次の内容を入力する必要があります。
・コールバック URL

GoogleおよびAmazon Cognito OpenID Connect プロバイダーの構成手順を参照してください。

コールバック URL

The Things Stack デプロイメントのコールバック URL (Google 用語ではリダイレクト URI) は、サーバー アドレスの後に OAuth エンドポイントが続き、選択した認証プロバイダーIDが含まれます。

/oauth/login/<authentication-provider-id>/callback

実際には、この認証プロバイダー ID を使用して、The Things Stack に認証プロバイダーを作成することになるので、覚えておいてください。

たとえば、クラスターtenant1内にテナントがありeu1、認証プロバイダー ID が の場合auth-provider、OAuth コールバック URL は次のようになります。

https://tenant1.eu1.cloud.thethings.industries/oauth/login/auth-provider/callback

``

SSO 用に The Things Stack を構成する

OpenID Connect プロバイダーを構成したら、Things Stack を構成できます。

次のコマンドを使用します(認証プロバイダ コマンドは でのみ使用できることに注意してくださいtti-lw-cli)。

$ tti-lw-cli authentication-providers create <authentication-provider-id> \
--allow-registrations \
--configuration.provider.oidc.client-id <client-id> \
--configuration.provider.oidc.client-secret <client-secret> \
--configuration.provider.oidc.provider-url <provider-url> \
--name <display-name>

これはname、The Things Stack のログイン画面に表示されるものです。たとえば、 idgoog とnameGoogを使用して Google OpenID 認証プロバイダを登録するには、次のようにします。

$ tti-lw-cli authentication-providers create goog \
--allow-registrations \
--configuration.provider.oidc.client-id xxxxx-vq3v4e2ha7c1668mr92iiqu0bd1spct2.apps.googleusercontent.com \
--configuration.provider.oidc.client-secret GOCSPX-Vxxxxxxx \
--configuration.provider.oidc.provider-url https://accounts.google.com \
--name Goog

プロバイダー検出 URL のリストは、AWS のこちらから入手できます。

成功すると、tti-lw-cli認証プロバイダーのリストが返されます。ログインすると、name登録した認証プロバイダを使用したログイン オプションが表示されます。

login-screen2.png

トラブルシューティング

SSOを使用してログインする際、email not verifiedエラーが発生します。

The Things Stackは、JWTトークンに含まれるメールアドレスがOIDCプロバイダ(The Things IDやSSO DBなど)によって検証されているかどうかをチェックします。

そのため、OIDCプロバイダが提供するJWTトークンには、email_verifiedフィールドが含まれているはずです。このフィールドが存在しない場合、ユーザーはSSOログイン時に以下のようなエラーに直面する可能性があります:

{
"code": 7,
"message": "error:pkg/account/oidc:unverified_email (email not verified)",
"details": [
    {
        "@type": "type.googleapis.com/ttn.lorawan.v3.ErrorDetails",
        "namespace": "pkg/account/oidc",
        "name": "unverified_email",
        "message_format": "email not verified",
        "correlation_id": "43c2ea63620d4487b64723d03195953e",
        "code": 7
    }]
}

このエラーを修正するには、The Things Stack SSOで使用するJWTトークンにemail_verifiedフィールドを含めるよう、OIDCプロバイダーに依頼する必要があります。

Google シングルサインオン

GoogleのOAuth 2.0 APIは、OpenID認証を受けており、The Things Stackへのログインに使用できます。このページでは、Googleアカウントを使用してThe Things Stackにログインするために必要な手順をご案内します。

前提条件

  1. 認証情報を作成できるGoogle Cloudアカウント

  2. 管理者権限を持つ The Things Stack アカウント

  3. The Things Stack Enterpriseコマンドラインインターフェース(tti-lw-cli)。

4.プロバイダーID(例:google)を選択します。3文字以上36文字以下で、小文字の英数字とダッシュのみを含むことができます。複数の、先頭または末尾のダッシュは使用できません。

Googleでプロバイダを設定します。

Google Cloud Console でのプロバイダの設定

Google Cloud Console にログインし、必要なプロジェクトに切り替えます。

まだ OAuth Consent Screen がない場合は設定します。提供される指示に従ってください。必須項目のみ入力します。

Oauth Client ID タイプの API 認証情報を作成します。値は以下の通りです。

  1. アプリケーションタイプ: Web Application

  2. 名前: 説明的な名前。

  3. リダイレクトURL: これは、https:///oauth/login//callbackの形式でなければなりません。server-addressは、The Things Stackがホストされているアドレスです。

クライアントが作成されると、GoogleはクライアントIDとクライアントシークレットを作成し、画面に表示します。これらの値を安全な場所にコピーしてください。後でこれらの値にアクセスすることもできます。

この情報を使って、The Things Stackにプロバイダを登録します。

The Things Stackにプロバイダを登録する

CLI経由でThe Things Stackにログインします。

プロバイダを登録します。以下の値を設定します。

OIDC_PROVIDER_ID="provider ID"                  # Provider ID from above.
OIDC_PROVIDER_NAME="My OIDC Provider"           # Name used to display on the Console.
OIDC_CLIENT_ID="client123"                      # Client ID from the previous step.
OIDC_CLIENT_SECRET="secret123"                  # Client Secret from the previous step.
$ tti-lw-cli ap create $OIDC_PROVIDER_ID \
    --name $OIDC_PROVIDER_NAME \
    --allow-registrations true \
    --configuration.provider.oidc.client-id $OIDC_CLIENT_ID \
    --configuration.provider.oidc.client-secret $OIDC_CLIENT_SECRET \
    --configuration.provider.oidc.provider-url https://accounts.google.com

-configuration.provider.oidc.provider-url は、https://accounts.google.com にハードコードされていることに注意してください。レスポンスの例を以下に示します。

{
  "ids": {
    "provider_id": "provider ID"
  },
  "created_at": "2023-10-05T05:18:11.685215Z",
  "updated_at": "2023-10-05T05:18:11.685215Z",
  "name": "My OIDC Provider",
  "allow_registrations": true,
  "configuration": {
    "oidc": {
      "client_id": "client123",
      "client_secret": "secret123",
      "provider_url": "https://accounts.google.com"
    }
  }
}

The Things Stackコンソールのログインページに向かいます。Login to ここではOIDC_PROVIDER_NAMEと同じであるボタンが表示されているはずです。

このボタンをクリックしてください。Googleのログインページにリダイレクトされます。The Things Stackが基本的なユーザー情報を読み取ることを許可するかどうか尋ねられます。許可するを選択してください。これは最初のログイン試行時のみです。

設定がすべて正しければ、The Things Stackコンソールにリダイレクトされ、ログインされます。ユーザー名は、ユーザー名の生成セクションで説明したルールに基づいて選択されます。