Auth0 で大手 Workspace アプリと(別のメアドを使って)SAML 認証してみた
「 Workspace アプリケーションだけメアド変えたい、、!」
登録するメールアドレスを変更すればいいようですが、私たちは内部で Auth0 を使って SSO(シングルサインオン)をしたかったので、地味に詰まってしまいました。
よく考えれば単純なことですが、思い出がてら jsys アドベントカレンダーに書くこともないので 書いておこうと思います。
※ この記事は所属組織を代表するものではありません
SSO の仕方
様々なプロトコルがあり、Auth0 はその多くに対応しています。
SAML
XML・HTTP ベースのプロトコルで、歴史が長く成熟しています。多くのサービスがサポートしていて、私たちが使っている Workspace アプリケーションも唯一対応していました。(なので使う羽目になりました。)
手法は原始的ですが、拡張されまくっており沢山の情報をやりとりできるようですが、情報もあまり見つかりませんでした。
OpenID Connect
よく見る OAuth 2.0 の認証部分のみを行うもので、JSON・HTTP ベースです。認証だけのためでも、しばしば OAuth が使われています。
署名は行いますが、暗号化は TLS に任せています。
Auth0 で SAML
SAML のやっていることが OAuth とは全く違ったので、一から規格を調べることになりました。
規格の概要については、以下の記事が参考になります:
- https://zenn.dev/open8/articles/52aa18ba913df9 (外部)
- https://milestone-of-se.nesuke.com/product/oss/saml/#toc5 (外部)
また、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(メールアドレスフォーマット)にして返信させる例です。
{
"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 |
メールアドレス | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress |
|
ユーザー名 | name | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name |
また、ユーザーの User Metadata をマッピングさせることもできるようです。(未実験)
{
"workspace": "account-alias@example.com"
}
"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 を自作しようかとも思いましたが、実験にとどめておこうかと思います。認証は難しく楽しいですが、安全な認証基盤を作れる自信はありません。
そのうち認証基盤を作ってみたい...!(夢)
筑波大学学園祭実行委員会情報メディアシステム局の紹介
筑波大学学園祭実行委員会は筑波大学の学園祭「雙峰祭(そうほうさい)」を開催しています。
情報メディアシステム局では、学園祭の実現に向けて参加企画向けシステムの開発や、独自の生配信プラットフォームを通じた映像配信をしています。
情報系に限らず様々な学生が1~2年生を中心に活動しています。少しでも面白そうと感じた筑波大生の方は、info@sohosai.comよりお気軽にお問い合わせください。
Discussion