🍣
認証・認可に関係することばをQ&Aで整理する。
以前、Oauth2.0、OIDCの言葉について整理しました。
続編です。
認証・認可まわりの概念は、その場で理解したつもりでも説明しようとすると難しくないでしょうか?つまり、理解しきれているとは言えない状態と感じています。(自分だけかもしれません。)
本当に理解していくためには、認証・認可の基盤を開発して、課題を解決していくプロセスにおいて、理解が深まっていくのだと思います。
理解の深堀りを試すためにも、Q&A形式で理解度を上げていきたいと思います。
認証・認可のQ&A
OAuth・OIDCとはなんですか?
OAuth:認可のためのプロトコル
OIDC:認証のためのプロトコル
認証・認可のプロトコルとはなんですか?
安全にリソースへアクセスさせるための通信ルールです。
ルールとして定義されていることは、
- Roles(登場人物)
- Flow(登場人物のコミュニケーションフロー)
- Tokenの(Access Token, ID Token などの用途)
- Endpoint(/authorize, /token)
などです。
OAuth 2.0におけるリソースオーナー、クライアント、リソースサーバー、認可サーバーの役割を説明できますか?
リソースオーナー:
- リソースを所有しているエンティティ(通常はエンドユーザー)
- クライアントに対して、リソースへのアクセスを許可する権限を持つ
- 通常、ユーザーがID/パスワードなどを用いて認可プロセスに参加する
例えば:
Facebookで認可していくとなるとFacebookアカウントを持っているユーザー
クライアント:
- リソースオーナーから認可を得て、アクセストークンを使ってリソースに対してアクセス・操作をするアプリケーション
例えば:
Facebook認証をするマッチングアプリがあったとすると、マッチングサービスのアプリケーション
リソースサーバー:
- 保護されたリソースにアクセス・操作するためのサーバー
- 認可を与えられたアプリケーションのリクエストに対して、リソースの提供を行う
例えば:
Facebookのサービスを提供するAPIサーバー。認可に準拠して、アカウントユーザー名や友達情報などを提供する
認可サーバー:
- クライアントからのリクエストに対して、アクセストークンや認可コードを発行するを発行するサーバー
- 認可のフローに準拠して、リソースオーナーから許可を得られた場合は認可券を発行する
Oauth2.0とOIDCのRole(登場人物と役割)の違いを説明できますか?
Oauth2.0 | OIDC | 役割の違い |
---|---|---|
リソースオーナー | End User | 実質的には同じ存在。OIDCでは「認証される人」と明示的に定義される |
クライアント | Relying Party(RP) | - |
リソースサーバー | Resource Server(継承) | OIDCでは焦点ではないが、APIアクセスには引き続き存在 |
認可サーバー | Open Id Proviedr(OP) | 認可だけでなく、ID Token を発行してユーザーの認証も行う |
AuthorizationCodeFlow の流れを説明できますか?
- 認可エンドポイント(
/authorize
)にリクエスト. パラメータ:client_id, redirect_uri, response_type=code, scope, state,(PKCE使用時は code_challenge など)// form:クライアント to:認可サーバー - 認可画面を表示// from:認可サーバー to:リソースオーナー
- 認可を承諾// from:リソースオーナー to:認可サーバー
- 認可サーバーが
redirect_uri
にリダイレクトし、クエリパラメータでcode
(認可コード)とstate
を付与(ex.https://client.example.com/callback?code=abc123&state=xyz
) // from: 認可サーバー to:クライアント - codeを用いてトークンエンドポイント(
/token
)にリクエスト.パラメータ:code, redirect_uri, client_id, client_secret(機密クライアントの場合)、code_verifier(PKCE使用時)// from:クライアント to:認可サーバー - アクセストークンを発行// from:認可サーバー to:クライアント
- リソースの操作withアクセストークン// from:クライアント to:リソースサーバー
OIDCのセキュリティトークンを説明できますか?
別の記事で整理してみました。
Discussion