プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • セキュリティ
  • 【セキュリティ】「OAuth」、「Open ID Connect」について
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【セキュリティ】「OAuth」、「Open ID Connect」について

04.18

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

OAuthとは?

現在のWeb APIにおいて非常に広く一般的に利用されている標準仕様です。基本的に広く第三者に公開されるAPIにおいて認可を行うために用いられます。

APIへのアクセスを認可(制御)して重要なデータへのアクセスを制御するHTTPベースのプロトコル。アプリ開発において、アプリを安全に扱うための標準化された仕組み。具体的には、アプリの所有者が誰かを明示化してなりすましを防止させるための仕組み。

認可と聞くとアプリケーションがユーザーに許可するようなイメージをするかもしれませんが、OAuthの場合は、ユーザーがアプリケーションに対して認可をする仕組みです。

例えば、情報を持っているサービスAが、サービスBに対してAPIを公開する場合に、サービスAの情報をサービスBに対して利用して用意か許可を与えることができる機能のことです。

用途

  • 一般的なWebサービスの連携
  • 企業内システムをクラウド連携させる目的

利用サービス例

  • Facebook
  • Twitter
  • Google

バージョン

1.0

瞬く間に世に広がっていった。モノシリックなプロトコルだった。

弱点

  • セッションID固定化攻撃に弱かった。

2.0

2012年ごろに公開された。

モノシリックではなくモジュールとなった。

利点

広く認知されて入れサーバ、クライアントともに様々な言語のライブラリがあり実装コストが低い。

悪意あるアプリ開発者の抑制(外部アプリへの操作権限を限定的にできる。)

もし、これがなかったら「ユーザー名」と「パスワード」を外部アプリに教えるしかなくなる。何度も入力するのは煩わしいので、パスワードをアプリ側に保存することになってしまう。そうすると仮に外部アプリの開発者が悪意あるユーザーだった場合は、利用者のアカウントでログインすることが可能になってしまう。

アクセストークンがあれば、仮にトークン情報が漏れたとしても操作を限定的にできる。(ダウンロード操作など)

悪意あるアプリ開発者の抑制(特定のアプリだけアクセスを遮断できる。)

OAuthを使えば、該当の悪意あるアプリへのアクセスを遮断できる。

攻撃に強い。

ユーザー名や、パスワードを保持しているアプリに比べて情報漏洩に強い。

アクセストークン自体が漏洩する可能性はありますが、有効期限があり、かつ限定的な権限しかないので影響は限定的。

仕組み、流れ

一度サービスA(Twitterなど)にログインすると、アクセストークンが発行されてそのトークンを用いればサービスBはアクセスが許可された物だと認識しパスワード入力なしでサービスAにアクセスすることが可能になります。

グランドタイプ

「グランド」は「付与」という意味。権限委譲のことを指している。標準仕様では以下の4つがある。

認可コードグランド

最も重要なグランド。コンフィデンシャルクライアント(サーバーサイドアプリなど)はこれを使う。

特徴

セキュアであること。(ブラウザを介さずに直接クライアントと認可サーバー間で受け渡されるため流出するリスクが低い。)

PKCEを用いた認可コードグランド

パブリッククライアントの場合のグランドタイプとして推奨されている。

インプリシットグランド

クライアントクレデンシャルグランド

リソースオーナーパスワードクレデンシャル

Open ID Connectとは?

OAuth2.0をユーザー認証として活用するために拡張したものです。OpenID Foundationという組織が2014年に仕様を公開した。

ほとんどOAuthと変わらないですが、OAuthに対して本人情報取得を加えた仕組みになります。

OAuth2.0からの拡張内容

以下を定めたこと。

  • IDトークン(JWT)
  • ユーザー情報を取得するためのエンドポイント(データ送受信するためのURL)

IDトークン(JWT)の利点

「ユーザーを特定するID」や「認証した日時」などを知ることができる。

また、「ユーザー情報を取得するためのエンドポイント」から様々なユーザー情報(ユーザープロフィールなど)を取得できます。

OIDCユースケース

SNSなどのサイトデータを使用したい。

SNSなどの認証を任せたい。

社内シングルサイオンのプラットフォームにしたい。

クラウドなら
  • Auth0、Okta

バックエンドのサービス間で安全にAPIを呼び合いたい。

スポンサーリンク
  • 2021 04.18
  • miyabisan2
  • コメントを書く
  • セキュリティ
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2018 07.19

    【セキュリティ】「SSO(シングルサインオン)」、「SAML」とは?

  2. 2021 08.08

    【OAuth】「トークン」、「エンドポイント」、「ロール」

  3. 2020 09.14

    【セキュリティ】攻撃手法(「DDoS攻撃」、「セッションハイジャック」、「IPスプーフィング」、「インジェクション」など)、「WAF」、「IDS」、「IPS」とは?

  4. 2018 07.22

    【セキュリティ】「共通鍵暗号方式」、「公開鍵暗号方式」について

  5. 2021 12.28

    【セキュリティ】証明書の基本、サーバー証明書発行までの流れなど

  6. 2018 04.07

    【Webセキュリティ】Javaサーブレットで、XSSを体験してみる。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【API】設計手順

【API】返すJSONデータの中身について

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー