🔐

Auth0 で大手 Workspace アプリと(別のメアドを使って)SAML 認証してみた

2024/12/13に公開

「 Workspace アプリケーションだけメアド変えたい、、!」

登録するメールアドレスを変更すればいいようですが、私たちは内部で Auth0 を使って SSO(シングルサインオン)をしたかったので、地味に詰まってしまいました。
よく考えれば単純なことですが、思い出がてら jsys アドベントカレンダーに書くこともないので 書いておこうと思います。
https://adventar.org/calendars/10646

※ この記事は所属組織を代表するものではありません

SSO の仕方

様々なプロトコルがあり、Auth0 はその多くに対応しています。

SAML

XML・HTTP ベースのプロトコルで、歴史が長く成熟しています。多くのサービスがサポートしていて、私たちが使っている Workspace アプリケーションも唯一対応していました。(なので使う羽目になりました。)
手法は原始的ですが、拡張されまくっており沢山の情報をやりとりできるようですが、情報もあまり見つかりませんでした。

OpenID Connect

よく見る OAuth 2.0 の認証部分のみを行うもので、JSON・HTTP ベースです。認証だけのためでも、しばしば OAuth が使われています。
署名は行いますが、暗号化は TLS に任せています。

Auth0 で SAML

SAML のやっていることが OAuth とは全く違ったので、一から規格を調べることになりました。
規格の概要については、以下の記事が参考になります:

また、SP(サービス・プロバイダー)からのアサーションかを確認する必要があるため、
「 サードパーティの IdP による SSO 」などの設定から「エンティティ ID」と「ACS( Assertion Consumer Service URL ) の URL」を知る必要があります。これは別の記事がたくさんあるので詳細は割愛します。

続いて、Auth0 の設定をします。
SSO Integration から設定すると、詳細な設定ができないため、Regular Web Application として作成する必要があります。

作成したら、Settings の Application URIs > Allowed Callback URLs に ACS URL を入力し、
下の方にある Advanced Setting を開きます。Endpoints タブの SAML Protocol URL とCertificates タブの Singing Certificate を記録しておきます。


Addons から SAML 2 を有効にして、その中の Settings を開きます。
Application Callback URL に ACS URL を入力し、Settings に設定を入力します。
細かい説明が下に書いてあります。
利用しているワークスペースアプリにもよりますが、NameId がユーザーの識別子になっていて、ほとんどの場合 メールアドレスです。

次の例は、ユーザー名を NameId(メールアドレスフォーマット)にして返信させる例です。

SAML2 > Settings
{
  "audience": "https://workspace.example/xxxxxx/acs",
  "createUpnClaim": false,
  "passthroughClaimsWithNoMapping": false,
  "mapUnknownClaimsAsIs": false,
  "mapIdentities": false,
  "signatureAlgorithm": "rsa-sha256",
  "digestAlgorithm": "sha256",
  "nameIdentifierFormat": "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress",
  "nameIdentifierProbes": [
    "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name"
  ]
}

設定ページにも掲載されていますが、フォーマットは主に次のようなものがあります。

説明 デフォルトでマップされる項目 Format
ユーザーID user_id http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier
メールアドレス email http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress
ユーザー名 name http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

また、ユーザーの User Metadata をマッピングさせることもできるようです。(未実験)

User Management > User Metadata
{
  "workspace": "account-alias@example.com"
}
SAML2 > Settings
"mappings": {
  "workspace": "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailAddress"
}

最後に、ワークスペースアプリの設定項目に、Auth0 の エンティティ ID と SAML Protocol URL(=ログイン URL など)、証明書の公開鍵(=Singing Certificate)を設定して完了です。

認証は楽しい。楽しいことを IDasS にさせるのか。

OSS の IdP( Keyclock や Authentik など)をホストしてみようかとも、簡易 IdP を自作しようかとも思いましたが、実験にとどめておこうかと思います。認証は難しく楽しいですが、安全な認証基盤を作れる自信はありません。
そのうち認証基盤を作ってみたい...!(夢)

筑波大学学園祭実行委員会情報メディアシステム局の紹介

筑波大学学園祭実行委員会は筑波大学の学園祭「雙峰祭(そうほうさい)」を開催しています。
https://sohosai.com/

情報メディアシステム局では、学園祭の実現に向けて参加企画向けシステムの開発や、独自の生配信プラットフォームを通じた映像配信をしています。

情報系に限らず様々な学生が1~2年生を中心に活動しています。少しでも面白そうと感じた筑波大生の方は、info@sohosai.comよりお気軽にお問い合わせください。

Discussion