ソーシャルログイン
外部ソーシャルネットワークを使って、Webサービス側のユーザ新規登録処理を簡単にする仕組み。 例:「Login with Twitter」「Login with GitHub」
_____
.--------. -----(1)----> +-------+ (_____)
| Client | | SNS | <--(2)--> | DB |
'--------' <----(3)----- +-------+ (_____)
^ |
| | _____
| +------(4)--> +------------+ (_____)
| | WebService | <--(5)--> | DB |
+---------(6)--- +------------+ (_____)
- ユーザはID、パスワードを送信する (1)
- SNSサーバはID管理DBで認証する (2)
- SNSはユーザに同意を求める
- ユーザにアクセストークンを送信する (3)
- ユーザはWebサービスにアクセスを送信する (4)
- WebサービスはID管理DBで認可する (5)
- サービス提供を開始する (6)
FIDO
FIDOの仕様には「UAF」と「U2F」の2つの規格があります。
- UAF : 認証器(指紋認証や顔認証などの生体認証)を使った認証の仕組み
- U2F : ID、パスワードに加えて二要素認証としてセキュリティコードやセキュリティキーを使った認証の仕組み
認証の流れとしてはチャレンジレスポンス方式です。
User
^
|(4) Client
.------V--------. <--(3)--- +------------+ ---(1)--> +-----------------+
| Authenticator | | WebBrowser | <--(2)--- | FIDO AuthServer |
'---------------' ---(5)--> +------------+ ---(6)--> +-----------------+
- ブラウザはログインを開始する (1)
- 認証サーバはチャレンジを送信する (2)
- ブラウザはチャレンジと共に認証を要求する (3)
- ユーザは指紋や顔認証などでローカル認証する (4)
- 認証器は秘密鍵でチャレンジに署名をする (5)
- ブラウザは署名されたチャレンジを認証サーバに送信する (6)
- 登録済みの公開鍵で署名を検証する
OAuth 2.0
リソースへのアクセス権の一部をアプリに移譲するための仕組み。
.-----. ---(1)--> +------------+ ---(1)--> +---------------+
| App | | WebBrowser | | Authorization |
| | <--(2)--- +------------+ <--(2)--- | Server |
| | | |
| | ---(3)-AuthorizationCode---------> | |
'-----' <--(4)-AccessToken---------------- +---------------+
^ |
| +-----(5)-AccessToken---------------> +-------+
+---------(6)---------------------------- | API |
+-------+
- リソース所有者はアプリに権限を付与する
- アプリは認可リクエストを送信する (1)
- 認可サーバは認可コードを送信する (2)
- アプリは認可コードを使ってトークンリクエストする (3)
- 認可サーバはアクセストークンを送信する (4)
- アプリはアクセストークンを使ってサービスリクエストする (5)
- APIはサービスを提供する (6)
OpenID Connect 1.0
OAuthの認可の仕組みに、認証もできるように拡張した仕組み。 OAuth 2.0 のアクセストークンに加えてIDトークンを送受信することで、認証ができるようになります。
.-----. ---(1)--> +------------+ ---(1)--> +---------------+
| App | | WebBrowser | | Authorization |
| | <--(2)--- +------------+ <--(2)--- | Server |
| | | |
| | ---(3)-AuthorizationCode---------> | |
'-----' <--(4)-AccessToken+IDToken-------- +---------------+
^ |
| +-----(5)-AccessToken+IDToken-------> +-------+
+---------(6)---------------------------- | API |
+-------+
Active Directoryの認証
Kerberos認証を使ったディレクトリサービス。 以下は Active Directory の例。
----(1)-----> +------------+ _____
.--------. <---(3)TGT--- | Domain | <--(2)--> (_____)
| Client | | Controller | | DB |
'--------' ----(4)TGT--> | | (_____)
^ | <---(6)ST---- +------------+
| |
| |
| +-------(7)ST---> +------------+
| | FileServer |
+----------(8)------ +------------+
- クライアントは TGT (Ticket Granting Ticket) のリクエストを送信する (1)
- ドメインコントローラは認証を行う (2)
- ドメインコントローラは TGT を送信する (3)
- クライアントは TGT をPCに保管する(認証済みでチケットをもらう資格がある)
- クライアントは ST (Service Ticket) のリクエストを送信する (4)
- ドメインコントローラは TGT を検証する (5)
- ドメインコントローラは ST を送信する (6)
- クライアントは ST を送信して、ファイルサーバにアクセスする (7)
- ファイルサーバは ST を検証し、認可されているか確認する
- ファイルサーバはサービスを提供する (8)
SAML
Kerberos認証のチケットの仕組みをクラウドサービス向けに提供する仕組み・システム。
----(1)-----> +------------+ _____
.--------. <---(3)------ | | <--(2)--> (_____)
| Client | | IdP | | DB |
'--------' ----(4)-----> | | (_____)
^ | <---(5)SA---- +------------+
| |
| |
| +-------(6)SA---> +------------+
| | SP |
+----------(7)------ +------------+
- クライアントはIDとパスワードを送信する (1)
- IdP (Identity Provider:認証・セキュリティアサーションの発行) で認証する (2)
- ユーザ専用のIdPポータル画面を表示する (3)
- クライアントは SP (Service Provider) を選択する (4)
- IdPはセキュリティアサーション(KerberosのSTに相当するもの)を発行する (5)
- クライアントは選択したSPのURLに自動的にリダイレクトされる
- 同時に、SPにセキュリティアサーションを送信する (6)
- SPはセキュリティアサーションを検証し認可する
- SPはサービスを提供する (7)
参考文献
- Software Design 2020年11月号, 第1特集 今さら聞けない認証・認可 セキュアなIAMを実現するために覚えておきたいこと, 技術評論社, 2020/10/17
- OAuth徹底入門 セキュアな認可システムを適用するための原則と実践, 翔泳社, 2019/1/30