はじめに
AWSやWebシステムを勉強していると、
- OIDC
- SAML
- SSO
- OAuth
- IdP
- SP
といった言葉をよく目にします。
特に「OIDCとSAMLは何が違うのか」「SSOとはどう関係するのか」が分かりにくかったため、この記事ではそれぞれの役割を整理します。
1. まず「認証」と「認可」
OIDCやSAMLを理解する前に、認証と認可の違いを押さえます。
認証(Authentication)
「あなたは誰ですか?」を確認することです。
ユーザー
↓
ログイン
↓
「このユーザーは田中さんです」
認可(Authorization)
「あなたは何をしていいですか?」を決めることです。
田中さん
↓
S3を閲覧できる
↓
ただし削除はできない
つまり、
認証 → あなたは誰?
認可 → あなたは何をしていい?
です。
2. OIDCとは?
OIDC(OpenID Connect)は、ユーザーを認証するためのプロトコルです。
OAuth 2.0をベースにしており、Webアプリやモバイルアプリなどで利用されています。
例えば「Googleでログイン」を考えると分かりやすいです。
ユーザー
↓
Webアプリ
↓
Google
↓
ユーザー認証
↓
認証結果
↓
Webアプリ
↓
ログイン完了
認証に成功すると、Googleなどの認証サービスからIDトークンが発行されます。
IDトークンには、例えば以下のようなユーザー情報が含まれます。
{
"sub": "123456789",
"name": "Taro",
"email": "taro@example.com"
}
実際にはJWT形式で扱われることが多く、
「このユーザーは認証済みで、ユーザーIDは○○です」
ということをアプリ側で確認できます。
IDトークンとアクセストークン
OIDCでは、アクセストークンも登場します。
IDトークン
→ このユーザーは誰?
アクセストークン
→ このユーザーはAPIを利用していい?
ここは、認証と認可の違いとして覚えておくと分かりやすいです。
3. SAMLとは?
SAML(Security Assertion Markup Language)も、ユーザーを認証するためのプロトコルです。
特に企業向けのシステムで広く利用されています。
SAMLでは、以下の2つの用語がよく登場します。
- IdP(Identity Provider):ユーザーを認証する側
- SP(Service Provider):ユーザーが利用するサービス側
例えば、
ユーザー
↓
AWS
↓
Microsoft Entra ID(IdP)
↓
ユーザー認証
↓
SAML Assertion
↓
AWS(SP)
↓
ログイン
という流れになります。
SAML Assertionとは?
SAML Assertionは、
「このユーザーは認証済みです」
ということを表す認証情報です。
SAMLではXML形式のデータが利用されます。
<Assertion>
<Subject>
tanaka@example.com
</Subject>
</Assertion>
実際には、署名や認証日時など、さまざまな情報が含まれます。
4. OIDCとSAMLの違い
| OIDC | SAML | |
|---|---|---|
| 正式名称 | OpenID Connect | Security Assertion Markup Language |
| 主な目的 | 認証 | 認証 |
| ベース | OAuth 2.0 | XML |
| 認証情報 | IDトークン | SAML Assertion |
| 主な形式 | JWTなど | XML |
| よく利用される場面 | Web・モバイルアプリなど | 企業向けシステムなど |
| サービス側の呼び方 | Client | SP |
ざっくり言うと、
OIDC
↓
JWTなどを利用
↓
Web・モバイルアプリなどでよく利用
SAML
↓
XMLを利用
↓
企業向けシステムなどで広く利用
という違いがあります。
5. SSOとは?
SSOは Single Sign-On の略で、
1回ログインすれば、複数のサービスを利用できる仕組み
のことです。
例えば会社で、
┌── AWS
│
社員 → 認証基盤 ── Slack
│
└── Microsoft 365
という環境があるとします。
社員が認証基盤に一度ログインすると、AWSやSlackなどを個別にログインせず利用できるようにします。
これがSSOです。
6. OIDC・SAML・SSOの関係
ここが一番重要です。
**OIDCとSAMLは「プロトコル」**で、**SSOは「仕組み」**です。
OIDC
└─ 認証プロトコル
SAML
└─ 認証プロトコル
SSO
└─ 1回のログインで
複数サービスを利用する仕組み
そのため、
OIDC = SSO
でも、
SAML = SSO
でもありません。
OIDCやSAMLなどのプロトコルを利用して、SSOを実現できます。
7. AWSで考える
AWSを利用する企業では、例えば次のような構成があります。
社員
↓
Microsoft Entra ID
↓
SAML / OIDC
↓
AWS
↓
AWS Management Console
ここで認証基盤が、
「このユーザーは認証済みです」
という情報をAWSへ連携します。
その後AWS側で、
「このユーザーは何をしていいのか?」
をIAM RoleやIAM Policyなどで決めます。
つまり、
認証
↓
「あなたは誰?」
↓
Entra ID
↓
OIDC / SAML
↓
AWS
認可
↓
「あなたは何をしていい?」
↓
IAM Role / IAM Policy
と考えると分かりやすいです。
8. まとめ
最後に、3つを一言で整理します。
OIDC
Webアプリなどで利用される認証プロトコル。
SAML
企業向けシステムなどで広く利用されている認証プロトコル。
SSO
1回のログインで複数のサービスを利用できる仕組み。
つまり、
認証プロトコル
┌─────────┐
│ │
OIDC SAML
│ │
└────┬────┘
↓
SSO
1回のログインで
複数サービスを利用
と整理すると、3つの関係を理解しやすくなります。