シングルサインオン(SSO)とは

## 勉強前イメージ

よくある[Googleアカウントでログイン]のやつ？

## 調査

### シングルサインオン(SSO)とは？

1つのIDとパスワードで認証を行い、複数のWebサービスやクラウドサービスにアクセスを可能にする仕組み

Qiitaのログイン画面でも `GitHub` `Twitter` `Google` の認証を利用してSSOが出来るようなログイン方法になっています。

![ログイン - Qiita - Google Chrome 2020-10-07 21.46.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/31a8e213-ac8d-1dfd-857b-be068db10561.png)

### シングルサインオン(SSO)のメリット・デメリット

#### メリット

- 利便性の向上
	- 色々なwebサイトやアプリケーションを利用していると、ID・パスワードが増え、またログイン作業も面倒になります。
	- シングルサインオンを利用することができれば、1つのID・パスワードを管理するだけで良くなり、またログインの回数も1回行うだけで済みます。
- パスワード漏洩リスクの低下
	- セキュリティリスクの対策で長いパスワードを使っていても、紙に書いてたりしたら意味がありません。
	- そもそも覚える必要もなく、漏洩のリスクも低下します。
- 管理業務の負担軽減
	- パスワードを忘れた等のフォローなどもシングルサインオンを利用すれば問い合わせが少なくなり、管理業務の負担も軽減されます。

#### デメリット

- パスワード漏洩の際のリスクが増大
	- 1つのシステムの認証を利用しているので、その認証するシステムのIDとパスワードが漏洩してしまうと他のシングルサインオンを行っているサービスまで影響が及び、不正利用されるリスクが高くなります。
- システム停止の際にシングルサインオンでログインができなくなる
	- 認証するシステムがダウンした場合、関連サービスまでログインができなくなる可能性があります。


### シングルサインオンの仕組み

#### 代行認証方式

クライアントのパソコンにインストールした専用のエージェントが代理でID・パスワードを打ち込む
エージェントはパソコンに常駐し、各サービスのログイン画面を検知して自動的にID・パスワードを入力

1. クライアントはアカウント情報DBにユーザ認証を行う
2. ログイン情報を取得
3. ログイン情報はクライアントのPCのメモリ上に保存される
4. PCに常駐するエージェントがwebのログイン画面を検知し、自動でID・パスワードを入力

![1Untitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/c926a886-20db-1349-c37b-4de5e46ddf42.png)


#### リバースプロキシ方式

リバースプロキシという中継サーバ上で認証を行う
リバースプロキシで認証を行った後、リバースプロキシより後ろのサービスにログインが出来るようになる

1. クライアントはリバースプロキシにweb認証を行う
2. リバースプロキシは認証済みのcookieをクライアントに発行する
3. クライアントはcookieを保持したままwebシステムにリバースプロキシ経由でアクセスが出来る

![2Untitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/7b87efc1-5144-040c-6c58-bd46a0a5e7ac.png)


#### エージェント方式

webサーバに専用のエージェントを組み込んで、エージェントがシングルサインオン用の認証サーバと連携を行い、認証や権限の確認を行う

1. クライアントはwebシステムに認証を行う
2. webシステムはシングルサインオン(SSO)サーバに認証情報を確認
3. webシステムは認証済みのcookieをクライアントに発行する
4. クライアントは発行されたcookieを保持したまま、SSOが適応されているwebシステムにアクセス
5. webシステムはシングルサインオン(SSO)サーバに権限等をチェックする

![3Untitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/57861091-23ef-8cf6-0c73-dcaa98a58fdb.png)


#### SAML認証方式

SAML認証は、Security Assertion Markup Languageの略になります。
1. クライアントが対象のwebサービス(SP)へアクセスする
2. webサービス(SP)はIdPへ認証要求(SAML)を送信
3. IdPはクライアントへ専用のログイン画面を表示
4. クライアントはID・パスワードを打ち込んでユーザ認証を行う
5. 成功すれば、IdPはwebサービス(SP)に認証応答(SAML)を送信する
6. webサービス(SP)は認証応答(SAML)を受け取ると自動ログインを実施
7. クライアントはログイン後、webサービス(SP)を見ることができ、SAMLに対応する別のサービスへも自動ログインが可能になる

![4Untitled Diagram.drawio - diagrams.net - Google Ch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/129517/65324531-e836-c6d3-9a61-7840376a9b75.png)

##### ※ 名称について
- IdP(Identity Provider) : 各種クラウドサービスが行う認証を、クラウドサービスに代わって行い認証情報をクラウドサービス側に提供するサービス
- SP(Service Provider) : シングルサインオンで認証行為を行うwebサービス

## 勉強後イメージ

SSOって１つだけかと思ってたけど、色々認証方式があった
身近にあるSSOって結構SAML認証が主なのかな...

## 参考

- [シングルサインオン（SSO）とは？メリットと仕組みを解説](https://www.kagoya.jp/howto/network/single-sign-on/)
- [シングルサインオン（SSO）とは](https://trustlogin.com/sso/)
- [シングルサインオン（SSO）とは | 仕組み・方式の種類・選び方 - 人気サービス](https://boxil.jp/mag/a2330/)
- [IdP | Identity Provider | アイディーピー](https://support.trustlogin.com/hc/ja/articles/231828068-IdP-Identity-Provider-%E3%82%A2%E3%82%A4%E3%83%87%E3%82%A3%E3%83%BC%E3%83%94%E3%83%BC)
- [シングルサインオン(SSO)について](https://www.network-engineer.info/%E6%83%85%E5%A0%B1%E5%87%A6%E7%90%86%E5%AE%89%E5%85%A8%E7%A2%BA%E4%BF%9D%E6%94%AF%E6%8F%B4%E5%A3%AB/%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%82%B5%E3%82%A4%E3%83%B3%E3%82%AA%E3%83%B3_sso/)
- [シングルサインオン（SSO）の選び方と仕組みの解説](https://www.ashisuto.co.jp/product/theme/security/sso.html)
- [シングルサインオン（SSO）とは？特徴や実現方法を解説します](https://ec-orange.jp/ec-media/?p=19201)