#❏背景
案件で認証周りを見る機会があったので詳細に理解したい
【GOAL】
とりあえず案件内で出てきたワードについて「内容」「違い」を理解する
- SSO
- OIDC
- OAuth
※詳細な仕様ではなく、ざっくり仕組みを理解することに重点を置く
#❏本題
##◆OAuth(2.0)
権限の受け渡し=認可 を行う仕組み
基本概念は以下
- 1.あらかじめ信頼関係を構築したサービス間で
- 2.ユーザの同意のもとに
- 3.セキュアにユーザの権限を受け渡しをする
###★何ができるか
サービス間で認可情報を受け渡せると、あるサービスが別のサービスの情報を操作できるようになる。
これにより、例えば、instagramでfacebookでも同時に投稿できるようにするみたいなもの
###★実現方法
ID/PWをクライアントに渡すのではなく、ある情報に対しての操作権限と有効期限等を定義したアクセストークンを渡すことにより
実現させている。
→ これにより、「リソースへの権限を持ったクライアントのみ」リソースを取得できる
###★登場人物と流れ
- ユーザ:一般ユーザ
- 認可サーバ:サービスプロバイダへのリソースへアクセスする権限を与えるサーバ
- サービスプロバイダ:リソースを持っているサービス(例示でいうinstagram)
- クライアント:サービスプロバイダの情報にアクセスしたいサービス(例示でいうfacebook)
一つ一つ見ていく
0.事前準備
クライアントがサービス情報を登録し、cliant_id(クライアント識別子)を取得。
1.ユーザがクライアントに認可が必要なアクションを起こす
例示の場合、facebookで投稿 のようなもの。
2.クライアントが認可サーバに0で取得したcliant_idを付与して「認可要求」
サービスプロバイダへのアクセストークンを渡す対象かをユーザに尋ねに行く。
「○○への権限を渡しますか?」画面の表出→サービスプロバイダのID/PWでログインののち、
OK「認可承認」でアクセストークンを発行「認可成功」
3.クライアントがサービスプロバイダにアクセストークンを付与してリソースデータをリクエスト
##◆OIDC
Open ID Connectの略
認可と認証をサポートした仕組み
※OAuthでも、アクセストークンを取得する際に認可サーバ経由で**「認証」していなかったっけ(ログインって書いたし)?
→ この認証はアクセストークンを取得するためだけのものであり、アクセストークンからではだれ(エンドユーザ)がサービスプロバイダにアクセスしているのかがわからない。**
仮に、その一回取得したアクセストークンを別のユーザが使用してアクセスしにかかってもリソースをとってこれてしまう
=大きな問題
このため、サービスプロバイダにアクセスしにかかる際に、毎回**「確からしいエンドユーザ」が「許可を得て」**いるのかを検証するにはOIDCの仕組みを利用しなければならない。 ...という自身の見解(ここがOAUthとの差分)
###★何ができるか
GoogleのID連携などにより、GoogleのIDを使って別サービスにログインできたりできる
###★実現方法
ある情報に対してのアクセストークンに加え、ユーザの本人証明としてID Tokenを渡すことで、実現させている。
→ これにより、「承認されたユーザ」が「リソースへの権限を持ったクライアントを使って」リソースを取得できる。
###★登場人物と流れ
- ユーザ:一般ユーザ
- OpenIDプロバイダ:サービスプロバイダへのリソースへアクセスする権限とID Tokenを与えるサーバ
- サービスプロバイダ:リソースを持っているサービス(例示でいうgoogle)
- クライアント:サービスプロバイダの情報にアクセスしたいサービス
一つ一つみていく
0.事前準備
クライアントがサービス情報を登録し、cliant_id(クライアント識別子)を取得。
1.ユーザがクライアントに認可が必要なアクションを起こす
例示の場合、googleでログイン のようなもの。
2.クライアントが認可サーバに0で取得したcliant_idを付与して「認可・認証要求」
サービスプロバイダへのアクセストークンを渡す対象かをユーザに尋ねに行く。
「○○への権限を渡しますか?」画面の表出→サービスプロバイダのID/PWでログイン「認証」ののち、
OK「認可承認」でアクセストークンとIDトークンを発行「認可・認証成功」
3.IDToken検証により改ざんがないかを確認
別ユーザがアクセストークンだけ取得してきた際に「別ユーザ」と認識できるように
アクセストークンとのマッピングで判断?(このあたりが理解しきれてないです)
4.クライアントがサービスプロバイダにアクセストークンを付与してリソースデータをリクエスト
##◆SSO
Single Sign Onの略
一つのID/PWで複数のサービスに同時にログインする仕組み。
→ Aサービスでログイン処理を済ませたのち、Bサービスを開いたらすでにログインされている!(ログイン不要)
wip*
###★実現方法
#❏まとめ
それぞれの違い、関係性について