0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

CognitoとAuto0をSAML連携してみた。

Posted at

はじめに

前回記事にしたGoogleアカウントを使ったID連携はOAuth2.0 Authorization Code Flowを使用したOIDC認証フローですが、今回は別形式のSAMLを使ったID連携を試してみます。

SAML(さむる)とは?

丸投げですが、SAMLの細かな説明は以下ページを見ていただければ、と思います。

まずは、OAuth 2.0OIDCSAMLの役割の違いをざっくりと理解しておくと良いのではと思います。

今回はOAuth 2.0OIDCSAMLの役割をClaudeに要約させてたいので、参考までに載せておきます!

OAuth 2.0
項目 内容
用途 APIアクセスの認可
仕組み アクセストークンでリソースにアクセス
特徴 認証はしない、認可専用
OIDC(OpenID Connect)
項目 内容
用途 認証 + 認可
仕組み OAuth 2.0 + IDトークン(ユーザー情報)
特徴 SSOに最適
SAML
項目 内容
用途 エンタープライズSSO
仕組み XMLベースのアサーション(認証証明)
特徴 古いシステムに強い

やってみた!

では、やってみます。

最初はOktaでやってみようかと思ったのですが、gmailアカウントだとアカウント登録できないようでしたので、今回はAuth0を使ってみました。

Auth0アプリケーションの作成

最初にアプリケーションを作っていきます。
他のサービスでいうクライアントに相当するところなのかな。

スクリーンショット 2025-05-06 5.45.17.png

名前は適当に。今回はSPAを選びます。

スクリーンショット 2025-05-05 5.57.45.png

Application URIs設定

次にSettingsApplication URIsを以下のように設定します。

Allowed Callback URLsのところは、SAML専用のエンドポイントがあるので注意ですね!

項目 設定値
Application Login URI https://[ドメイン名].auth.ap-northeast-1.amazoncognito.com
Allowed Callback URLs https://[ドメイン名].auth.ap-northeast-1.amazoncognito.com/saml2/idpresponse
Allowed Logout URLs http://localhost:3000
Allowed Web Orgins http://localhost:3000

スクリーンショット 2025-05-05 6.10.52.png

次に、AddonからSAML2を選択し、Settingタブ内から、ログアウト時にURIの指定をします。

{
  "logout": {
    "callback": "http://localhost:3000",
    "slo_enabled": "false"
  }
}

スクリーンショット 2025-05-05 6.12.46.png

この設定がなぜ必要なのかが分からず、設定の仕方が合ってるか悩ましいのですが、この設定がないとログアウト時の画面遷移が正しく動作しませんでした。

SAML IdPメタデータファイル取得

最後に、Cognito設定時に利用するメタデータファイルをダウンロードしておきます。
このファイルにはSAML認証時のエンドポイントや、署名検証を行うX509証明書などが記載されています。

スクリーンショット 2025-05-05 6.13.13.png

これでAuth0側の設定は完了です!

Cognitoの設定(カスタムプロバイダーの追加)

ユーザプールの以下からAuth0の設定を行います。

スクリーンショット 2025-05-05 6.16.58.png

スクリーンショット 2025-05-05 6.17.24.png

名前をつけてあげて、SAML IdPメタデータファイルをアップロードするだけです。

スクリーンショット 2025-05-05 6.20.36.png

最後に属性のマッピングをします。

スクリーンショット 2025-05-05 6.20.56.png

SAML属性ですが、Auth0だと以下のところのDebugからアサーションが確認できるので、ここを参考に設定します。

今回はnamehttp://schemas.auth0.com/usernameでマッピングします。

スクリーンショット 2025-05-06 6.42.37.png

Cognitoの設定(クライアント設定)

最後に、クライアントのIDプロバイダーに先ほど設定したAuth0の設定を追加すれば完了です!

スクリーンショット 2025-05-05 6.22.02.png

これで、マネージドログイン画面にAuth0も追加されました!
スクリーンショット 2025-05-06 6.51.34.png

実際に選択してみると、Auth0のログイン画面が表示されます。

スクリーンショット 2025-05-05 6.23.58.png

動作確認

少し動作確認してみます。

処理シーケンス

Chromeで取得できるネットワークログからシーケンス図を作ってみました。

SAML 2.0とOAuth 2.0/OIDCのハイブリッドフローになっていることがわかると思います。

IDトークン

ID連携して、取得したIDトークンを覗いてみます。

IdPがAuth0であることや、ユーザ名moriyama_samlが取得できていることがわかります。

{
  "at_hash": "fTyFKK1CI_nygSE8h3kN9A",
  "sub": "17a4ca28-9041-7078-7042-53c919xxxxxx",
  "cognito:groups": [
    "ap-northeast-1_xxxxxxxxx_Auth0SAML"
  ],
  "iss": "https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxxxxxx",
  "cognito:username": "auth0saml_auth0|6817db56a810172c42865000",
  "nonce": "-D0I1sJlzLIMwx4qOnsO3US7yr8Nw1AJj8GC-1VAcam2o9PaJ6IX8yOf3iiEgcxtzKHOyQTNZ6JAliFxqsXrYkMAXVaRyTVQh7s1_YgInOtJEjl5bjV4plCEkO8Q2Qw9KQj54VWLPKc3hzCpnMkoqMyk3G_-7LQ7PVemv-16dm0",
  "origin_jti": "b069ac48-330e-451a-a6fa-58b988fdbc88",
  "aud": "ar4sjg7u1g1t16cah2rjfkxxx",
  "identities": [
    {
      "dateCreated": "1746393943191",
      "userId": "auth0|6817db56a810172c42865000",
      "providerName": "Auth0SAML",
      "providerType": "SAML",
      "issuer": "urn:dev-ryrknqlogokxxxxx.us.auth0.com",
      "primary": "true"
    }
  ],
  "token_use": "id",
  "auth_time": 1746393943,
  "name": "moriyama_saml",
  "exp": 1746397543,
  "iat": 1746393944,
  "jti": "f5cc7429-b061-476f-a460-9e3b59774632"
}

スクリーンショット 2025-05-07 3.57.15.png

最後に

簡単に、ではありますが、2回に分けてID連携を確認できました。

身近な機能ですが、中身の挙動を垣間見ることができてよかったです!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?