「Googleカレンダーと自社システムを連携したい」
「Microsoft 365のデータを業務システムから取得したい」
「OAuth 2.0という言葉が出てきたが、何をする仕組みなのか分からない」
外部サービスのAPIとWebシステムを連携するときによく登場するのが、OAuth 2.0です。
OAuth 2.0は簡単にいうと、ユーザーのパスワードを外部アプリへ渡さず、必要な範囲だけ外部サービスへのアクセスを許可するための認可の仕組みです。
例えば、業務システムからGoogleカレンダーを利用したい場合を考えてみます。
危険な設計は、
Googleのメールアドレス
+
Googleのパスワード
を業務システムへ登録してもらう方法です。
OAuth 2.0を利用すると、
業務システム
↓
Googleの認可画面へ移動
↓
ユーザーがGoogle上で許可
↓
業務システムへアクセス権を付与
↓
Google Calendar APIを利用
という流れにできます。
業務システム側がGoogleアカウントのパスワードそのものを取得する必要はありません。
ただし、OAuth 2.0を理解するときには、
- 認証と認可の違い
- アクセストークン
- リフレッシュトークン
- スコープ
- Authorization Code
- PKCE
- Redirect URI
- OpenID Connectとの違い
など、似た用語を整理する必要があります。
この記事では、OAuth 2.0の基本的な仕組みから、業務システムで実際に利用するときの設計ポイントまで解説します。
OAuth 2.0とは
OAuth 2.0は、アプリケーションが別のサービスへアクセスするための「権限」を安全に委譲するための仕組みです。
重要なのは、
OAuth 2.0は基本的に認証ではなく認可のための仕組み
という点です。
例えば、ある会社が顧客管理システムを利用しているとします。
顧客管理システムからGoogleカレンダーへ予定を登録したい場合、
「この顧客管理システムに、自分のGoogleカレンダーへ予定を登録する権限を与える」
必要があります。
このようなアクセス権の付与を扱うのがOAuth 2.0です。
認証と認可の違い
OAuth 2.0を理解するには、「認証」と「認可」の違いを押さえておくことが重要です。
認証とは
認証は、
「あなたは誰ですか?」
を確認する処理です。
例えば、
メールアドレス
+
パスワード
でログインし、
「このユーザーは山田さんである」
と確認します。
ほかにも、
- パスキー
- 生体認証
- ワンタイムパスワード
- 多要素認証
などがあります。
認可とは
認可は、
「そのユーザーは何をしてよいですか?」
を決める処理です。
例えば、
一般社員
→ 顧客情報を閲覧できる
営業マネージャー
→ 顧客情報を編集できる
管理者
→ ユーザー管理までできる
という違いです。
OAuth 2.0では特に、
あるアプリケーションへ、別サービスのどの機能へのアクセスを許可するか
を扱います。
OAuth 2.0を具体例で理解する
例えば、自社の営業支援システムからGoogleカレンダーへ商談予定を登録したいとします。
ユーザーは営業担当者です。
営業支援システムには、
「Googleカレンダーと連携」
というボタンがあります。
ボタンを押すと、
営業支援システム
↓
Googleの画面へ移動
↓
Googleアカウントで認証
↓
「このアプリにカレンダーへのアクセスを許可しますか?」
↓
ユーザーが許可
↓
営業支援システムへ戻る
という流れになります。
その後、営業支援システムは付与された権限を使ってGoogle Calendar APIへアクセスします。
重要なのは、
営業支援システムへGoogleのパスワードを渡していない
という点です。
なぜOAuth 2.0が必要なのか
OAuthのような仕組みがなければ、外部サービスを操作するためにユーザーの認証情報そのものを預かる設計になりかねません。
例えば、
「Googleカレンダーへ登録したいのでGoogleのパスワードを入力してください」
という仕組みです。
この方法には大きな問題があります。
パスワードを外部アプリへ渡す必要がある
利用者は重要な認証情報を別サービスへ預けることになります。
権限を細かく分けにくい
カレンダーだけ利用させたいのに、アカウントそのものの認証情報を渡すことになります。
パスワード変更の影響を受ける
ユーザーがパスワードを変更すると連携できなくなる可能性があります。
OAuth 2.0では、パスワードではなくアクセス用のトークンを利用することで、こうした問題を避けやすくします。
OAuth 2.0に登場する4つの役割
OAuth 2.0を理解するときは、まず登場人物を整理すると分かりやすくなります。
代表的には4つの役割があります。
Resource Owner
保護されたデータや機能へのアクセスを許可する主体です。
一般的なWebサービスではユーザー本人が該当します。
例えばGoogleカレンダー連携なら、
営業担当者
です。
Client
Resource Ownerの許可を受けてAPIへアクセスするアプリケーションです。
先ほどの例なら、
自社の営業支援システム
です。
OAuthでいう「Client」は必ずしも顧客という意味ではありません。
APIを利用するアプリケーションを指します。
Authorization Server
ユーザーの許可を確認し、アクセストークンなどを発行するサーバーです。
例えばGoogle APIを利用する場合は、Google側の認可基盤がこの役割を担います。
Resource Server
実際の保護対象となるAPIを提供するサーバーです。
例えば、
Google Calendar API
などが該当します。
つまり、
ユーザー
↓
Clientに許可
↓
Authorization Serverがトークン発行
↓
ClientがResource Serverへアクセス
という関係です。
アクセストークンとは
OAuth 2.0で重要な役割を持つのがアクセストークンです。
アクセストークンは、
APIへアクセスするための権限を表す情報
です。
例えば、
営業支援システム
↓
アクセストークン取得
↓
Google Calendar APIへリクエスト
という形で利用します。
API側はアクセストークンを確認し、許可されたアクセスかを判断します。
アクセストークンはパスワードではない
アクセストークンとパスワードは別物です。
例えばアクセストークンには、
- 有効期限がある
- 利用できるAPI範囲を制限できる
- 無効化できる
といった特徴があります。
そのため、ユーザーのパスワードそのものを外部アプリへ渡す必要がありません。
スコープとは
OAuth 2.0では、アプリケーションへ与える権限の範囲を「スコープ」で表すことがあります。
例えばGoogleカレンダー連携を考えます。
アプリに必要なのが、
「予定を登録する権限」
だけなのに、
メール
ファイル
連絡先
カレンダー
その他すべて
へのアクセスを要求するのは適切ではありません。
可能な限り必要な範囲だけ要求します。
これは最小権限の考え方です。
例えば業務システムでも、
カレンダー閲覧
カレンダー更新
を分けられるなら、本当に必要な権限だけ取得することを検討します。
リフレッシュトークンとは
アクセストークンには有効期限が設定されることがあります。
有効期限が切れるたびに、
「もう一度ユーザーに認可してもらう」
のでは業務システムとして使いにくくなります。
そこで利用されることがあるのがリフレッシュトークンです。
大まかには、
アクセストークン
↓
有効期限切れ
↓
リフレッシュトークンを利用
↓
新しいアクセストークン取得
という流れです。
ただし、リフレッシュトークンは長期間アクセスを継続するために利用される重要な情報です。
漏えいした場合の影響が大きいため、安全に保存・管理する必要があります。
Authorization Codeとは
OAuth 2.0には複数の認可フローがあります。
Webアプリでよく関係するのがAuthorization Codeを利用するフローです。
基本的な流れを簡略化すると、
ユーザー
↓
外部サービスの認可画面
↓
許可
↓
Authorization Code発行
↓
自社システムへ戻る
↓
Authorization Codeをトークンへ交換
↓
アクセストークン取得
となります。
ポイントは、認可画面からいきなりアクセストークンを返してもらうのではなく、まず一時的なAuthorization Codeを受け取り、その後トークンへ交換することです。
PKCEとは
現在のOAuth 2.0実装を理解するうえで重要なのがPKCEです。
PKCEはProof Key for Code Exchangeの略です。
Authorization Codeが第三者に奪われた場合のリスクを軽減するために利用されます。
大まかな考え方は、
アプリ側で秘密の値を作成
↓
そこからCode Challengeを生成
↓
認可リクエスト時に送信
↓
Authorization Code取得
↓
トークン交換時に元の値を提示
↓
一致を確認
↓
アクセストークン発行
というものです。
Authorization Codeだけを取得しても、対応する情報を持っていなければ簡単にはトークンへ交換できないようにします。
OAuth 2.0を新しく実装する場合は、Authorization CodeとPKCEを組み合わせた構成をまず検討するとよいでしょう。
OAuth 2.0の基本フロー
Googleなど外部サービスへアクセスするケースを簡略化すると、次のようになります。
1. ユーザーが「連携する」を押す
例えば、
「Googleカレンダーと連携」
を選択します。
2. 認可画面へ移動する
自社システムからAuthorization Serverへ移動します。
このとき、
- Client ID
- Redirect URI
- Scope
- state
- PKCE用の情報
などを指定します。
3. ユーザーが許可する
外部サービス上で、
「このアプリにカレンダーへのアクセスを許可しますか?」
などと表示されます。
ユーザーが許可します。
4. Authorization Codeを受け取る
外部サービスから自社システムのRedirect URIへ戻ります。
その際、Authorization Codeを受け取ります。
5. トークンへ交換する
自社システムがAuthorization ServerへAuthorization Codeを送り、必要な検証を経てアクセストークンを取得します。
6. APIへアクセスする
取得したアクセストークンを使ってResource Serverへアクセスします。
例えば、
Google Calendar API
↓
予定登録
といった操作を行います。
Redirect URIとは
Redirect URIとは、外部サービスでの認可が終わった後にユーザーを戻す自社システムのURLです。
例えば、
のようなURLです。
OAuth 2.0では重要なセキュリティ項目の一つです。
攻撃者が自由なURLへ認可結果を転送できる状態では問題があるため、通常はAuthorization Server側へ事前登録したRedirect URIと照合します。
開発時には、
開発環境
ステージング環境
本番環境
それぞれのRedirect URIを整理して管理します。
stateとは
OAuth 2.0の認可フローではstateという値を利用することがあります。
簡単にいうと、
「このOAuth認可を開始したのは、自分のシステムからの正しいリクエストか」
を確認するために利用します。
例えば認可開始時にランダムな値を生成し、
認可リクエスト
↓
stateを付与
↓
外部サービス
↓
自社Callbackへ戻る
↓
返されたstateを検証
という流れです。
一致しなければ処理を中止します。
OAuth連携では、画面が戻ってきたからといって無条件に処理を進めないことが重要です。
Client IDとは
OAuth連携を設定すると、多くのサービスでClient IDが発行されます。
Client IDは、
「どのアプリケーションからのOAuthリクエストか」
を識別するための情報です。
例えば、
hiro-dev-lab-calendar-app
というアプリケーションを外部サービス側へ登録し、Client IDを取得します。
Client ID自体は、一般に秘密情報として扱うものではありません。
Client Secretとは
サーバー側WebアプリなどではClient Secretが利用される場合があります。
名前のとおり秘密として管理する必要があります。
例えば、
- GitHubへ直接コミットしない
- JavaScriptへ埋め込まない
- ブラウザへ送信しない
- 環境変数やSecrets管理サービスを利用する
といった対策が必要です。
特に、
Next.js
React
Vue
などを利用している場合、
フロントエンドへ配布されるコードへClient Secretを置かない
ように注意します。
OAuth 2.0とOpenID Connectの違い
OAuth 2.0について調べると、OpenID Connect(OIDC)もよく登場します。
違いを簡単に整理します。
OAuth 2.0
主な目的は認可です。
「このアプリにGoogleカレンダーへのアクセスを許可する」
といった用途です。
OpenID Connect
OAuth 2.0の仕組みを利用して、ユーザー認証・本人情報の受け渡しを行うための仕組みです。
例えば、
「Googleでログイン」
「Microsoftアカウントでログイン」
などを実装する場合に関係します。
そのため、
OAuth 2.0
= ログイン機能
と単純に考えるのは適切ではありません。
外部APIへの権限委譲ならOAuth 2.0、ログイン・本人確認まで扱うならOpenID Connectも確認する
と整理すると分かりやすいでしょう。
「Googleでログイン」はOAuth 2.0だけではない
よくある誤解が、
「GoogleログインはOAuth 2.0」
という理解です。
実際にはユーザーをログインさせて本人情報を取得する目的では、OpenID Connectが関係します。
例えば、
ユーザー
↓
Googleで本人確認
↓
自社システム
↓
「このユーザーは誰か」を確認
↓
ログイン
という用途です。
一方、
自社システム
↓
Google Driveへファイル保存
のように外部サービスへのアクセス権を得ることが目的なら、OAuth 2.0の認可が中心になります。
業務システムでOAuth 2.0が必要になる代表例
Google Calendar連携
営業支援システムから商談予定をGoogleカレンダーへ登録します。
例えば、
案件画面
↓
「商談予定を登録」
↓
Google Calendar API
↓
予定作成
という連携です。
Gmail・メールサービスとの連携
ユーザーの許可を得てメールAPIへアクセスするケースがあります。
例えば顧客管理システム上で、
顧客
↓
関連メール表示
といった機能です。
必要なスコープや個人情報の扱いには慎重な設計が必要です。
Google Driveとの連携
業務システムからGoogle Driveへ、
- 契約書
- 見積書
- 帳票
などを保存するケースです。
Microsoft 365との連携
Microsoft Graphなどを利用して、
- Outlook
- Calendar
- OneDrive
- Teams
などと業務システムを連携するケースがあります。
Slackとの連携
例えば、
申請承認
↓
Slackへ通知
案件更新
↓
担当チャンネルへ投稿
といった連携です。
OAuthによって利用するワークスペースへの権限を取得します。
【具体例】案件管理システムとGoogleカレンダーを連携する
実際の業務システムを想定してみましょう。
現状
営業担当者は案件管理システムへ商談予定を入力します。
その後、
Googleカレンダー
↓
同じ予定をもう一度入力
しています。
課題
- 二重入力
- 日時の入力間違い
- カレンダー登録忘れ
が発生します。
要求
案件管理システムからGoogleカレンダーへ予定を登録できるようにします。
初回連携
営業担当者
↓
「Googleカレンダー連携」
↓
Google認可画面
↓
必要なアクセスを許可
↓
自社システムへ戻る
↓
OAuth連携情報を保存
通常利用
案件詳細
↓
商談日時入力
↓
「Googleカレンダーへ登録」
↓
保存済みトークンを利用
↓
Google Calendar API
↓
予定作成
という仕組みにできます。
ユーザーがGoogleのパスワードを自社システムへ登録する必要はありません。
トークンはデータベースへそのまま保存してよい?
アクセストークンやリフレッシュトークンは重要な情報です。
漏えいすると、付与された権限の範囲で外部サービスへアクセスされる可能性があります。
そのため、
- 保存する必要が本当にあるか
- 暗号化するか
- 誰がアクセスできるか
- ログへ出力していないか
- バックアップに含まれるか
- 連携解除時にどう処理するか
まで考える必要があります。
特にリフレッシュトークンは長期間利用される場合があるため慎重に管理します。
アクセストークンをURLへ付けない
重要なトークンを、
のようなURLへ含める設計は避けます。
URLは、
- ブラウザ履歴
- アクセスログ
- 解析サービス
- Referer
などへ残る可能性があるためです。
APIへアクセストークンを送る場合は、そのAPIが定める安全な方法を利用します。
トークンをログへ出さない
開発中によくある問題です。
例えば、
OAuth response:
{
access_token: xxxxx,
refresh_token: xxxxx
}
をそのままログへ出すと、ログ閲覧権限を持つ人からトークンを確認できる可能性があります。
本番環境では、
- アクセストークン
- リフレッシュトークン
- Client Secret
などの機密情報をログへ出力しないようにします。
スコープは必要最小限にする
例えばカレンダーへ予定を作成するだけなのに、
メール
連絡先
ファイル
プロフィール
カレンダー
など大量の権限を要求すると、利用者も不安になります。
また、認証情報が漏えいした場合の影響範囲も広くなります。
そのため、
実装したい機能に必要なスコープだけ要求する
ことが基本です。
OAuth連携解除も設計する
「連携する」機能を作ったなら、「連携を解除する」方法も必要です。
例えば管理画面に、
Googleカレンダー
連携状態:連携済み
[連携解除]
と表示します。
解除時には、
- 保存しているトークンを削除・無効化する
- 必要に応じて外部サービス側でも権限を取り消す
- 連携状態を未連携へ変更する
などを行います。
ユーザーが利用をやめられる設計も重要です。
外部サービス側で権限を取り消されるケースも考える
自社システム上では、
「連携済み」
となっていても、ユーザーがGoogleやMicrosoft側の設定画面からアクセス権を取り消すことがあります。
その場合、
API呼び出し
↓
認可エラー
となります。
システム側では、
「Googleとの連携が無効になっています。再連携してください。」
など、ユーザーが次に何をすればよいか分かるエラーを表示します。
リフレッシュトークンが無効になるケースも考える
長期間動かしている業務システムでは、
「一度OAuth連携したら永久に利用できる」
とは限りません。
外部サービス側の仕様やユーザー操作などによって、再認可が必要になる場合があります。
そのため、
APIエラー
↓
トークン更新を試す
↓
更新不可
↓
再認可が必要
↓
ユーザーへ案内
という流れを考えておきます。
OAuth 2.0ではHTTPSを前提に考える
OAuthでは認可コードやトークンなど重要な情報を扱います。
本番環境では通信経路を適切に保護し、HTTPSを利用することが基本です。
OAuthだけ安全に実装しても、
通信
セッション
Cookie
認証
など周辺部分が適切でなければ、システム全体として安全とはいえません。
OAuth 2.0の実装を自作しすぎない
OAuth 2.0には多くのセキュリティ上の注意点があります。
そのため、
「仕組みを理解すること」
と、
「プロトコル処理をすべて自分で一から実装すること」
は別です。
一般的には、
- 外部サービスの公式SDK
- 実績のあるOAuthライブラリ
- 認証・ID基盤サービス
などを利用することを検討します。
特に、
- state検証
- PKCE
- トークン更新
- エラー処理
などを独自実装する場合は慎重なレビューが必要です。
Authorization Code + PKCEを基本候補にする
OAuth 2.0には歴史的に複数の認可方式があります。
しかし、新しいWebアプリ・SPA・モバイルアプリなどを設計するときは、Authorization CodeとPKCEを組み合わせた方式を基本候補として検討すると分かりやすいでしょう。
特に、Authorization Codeが途中で取得された場合でも、それだけでトークン交換されにくくするためにPKCEが役立ちます。
一方、過去の実装例を検索すると古い方式の記事も見つかるため、
「以前よく使われていたから」
という理由だけで採用せず、利用するサービスの最新ドキュメントを確認することが重要です。
ユーザーが操作しないシステム間連携は別の方式を使うこともある
OAuth利用では必ず人間が認可画面を開くとは限りません。
例えば、
自社バッチシステム
↓
自社API
のようなサーバー間連携では、人間ではなくアプリケーション自体に権限を与えるケースがあります。
その場合はClient Credentialsなど、利用目的に適した方式を検討します。
重要なのは、
「OAuthなら全部Authorization Code」
ではなく、
- ユーザー本人の権限を利用するのか
- システム自身の権限で通信するのか
を整理することです。
OAuth 2.0とAPIキーの違い
外部API連携ではAPIキーもよく利用されます。
OAuth 2.0とは目的が異なる場合があります。
APIキー
主に、
「どのアプリケーションからのAPI利用か」
を識別するために利用されます。
比較的単純なAPI連携で利用されることがあります。
OAuth 2.0
ユーザーの権限をアプリケーションへ委譲する用途に適しています。
例えば、
「山田さんのGoogleカレンダー」
へアクセスするなら、そのユーザーによる許可が必要になります。
APIの用途に応じて使い分けます。
OAuth 2.0とSSOは同じではない
OAuthについて調べるとSSOも関連して出てきます。
SSOはSingle Sign-Onの略で、一度のログインで複数システムを利用できる仕組みです。
OAuth 2.0は認可フレームワークなので、それ自体がSSOそのものというわけではありません。
企業向けログインでは、
- OpenID Connect
- SAML
などが使われることがあります。
「Google APIを操作したい」のか、
「Microsoftアカウントで社内システムへログインしたい」のか
によって必要な仕組みが異なります。
【具体例】Microsoft 365と業務システムを連携する
例えば社内案件管理システムからMicrosoft 365へアクセスしたいケースです。
要求は、
「案件登録時に担当者のOutlookカレンダーへ予定を追加したい」
とします。
初回
社員
↓
Microsoftアカウントと連携
↓
必要な権限を許可
↓
トークン取得
↓
安全に保存
通常処理
案件登録
↓
商談日時を保存
↓
Microsoft GraphなどのAPIへアクセス
↓
カレンダー予定作成
↓
結果を自社システムへ保存
エラー
トークン無効
↓
更新処理
↓
更新不可
↓
ユーザーへ再連携を案内
というところまで設計します。
単にAPIが正常に動くケースだけでなく、連携解除や期限切れへの対応も必要です。
【コピペ用】OAuth 2.0導入時の要件整理チェックリスト
OAuthを業務システムへ導入するときは、次の項目を整理すると要件をまとめやすくなります。
連携目的
- 連携するサービス:
- 利用するAPI:
- 実現したい業務:
- ユーザー単位の連携か:
- 会社共通アカウントか:
権限
- 必要なスコープ:
- 読み取りだけか:
- 更新も必要か:
- 削除権限が必要か:
OAuthフロー
- Authorization Codeを利用するか:
- PKCEを利用するか:
- Redirect URI:
- stateを検証するか:
トークン
- アクセストークンを保存するか:
- リフレッシュトークンを保存するか:
- 保存時に保護するか:
- ログへ出力しないか:
- 有効期限を管理するか:
エラー
- トークン期限切れ時:
- トークン更新失敗時:
- ユーザーが権限を取り消した場合:
- 外部API障害時:
- 再連携方法:
解除
- ユーザーが連携解除できるか:
- 保存トークンを削除するか:
- 外部サービス側の権限も取り消すか:
セキュリティ
- Client Secretをサーバー側で管理しているか:
- HTTPSを利用するか:
- Redirect URIを制限しているか:
- 必要最小限のスコープか:
この項目を整理すると、「OAuthを入れる」という曖昧な要求から、具体的なシステム要件へ落とし込みやすくなります。
OAuth 2.0実装でよくある失敗
OAuthをログイン機能だと思う
OAuth 2.0の中心は認可です。
ユーザー認証が必要ならOpenID Connectなども確認します。
Client Secretをフロントエンドへ置く
ブラウザへ配布されるJavaScriptへ秘密情報を含めると漏えいする可能性があります。
秘密情報は適切にサーバー側で管理します。
必要以上のスコープを要求する
機能に不要な権限まで取得すると、漏えい時の影響も大きくなります。
必要最小限にします。
stateを検証しない
OAuth開始時とCallback時のリクエストを適切に関連付けられなくなります。
セキュリティ対策として正しく検証します。
Redirect URIを安易に扱う
任意のURLへ認可結果を送れる設計にしないよう、外部サービスの仕様に従って厳密に管理します。
トークンをログへ出力する
デバッグ用ログからアクセストークンやリフレッシュトークンが漏れる可能性があります。
機密情報をログへ残さないようにします。
正常系しか実装しない
OAuth連携では、
- ユーザーが許可しない
- トークンが無効になる
- 外部側で権限を取り消す
- APIが一時的に停止する
といったケースがあります。
再認可やエラー表示まで考えます。
OAuth 2.0に関するよくある質問
OAuth 2.0とは簡単にいうと何ですか?
ユーザーのパスワードそのものを外部アプリへ渡さず、必要なサービスへのアクセス権をアプリへ与えるための認可の仕組みです。
例えば、業務システムへGoogleカレンダーへのアクセスだけを許可するケースがあります。
OAuth 2.0は認証ですか?
OAuth 2.0は基本的に認可を目的とした仕組みです。
ログインなどユーザーの本人確認まで行いたい場合は、OpenID Connectなどが関係します。
アクセストークンとは何ですか?
APIへアクセスするときに利用する権限情報です。
外部サービスはアクセストークンを確認して、要求されたAPIアクセスを許可するか判断します。
リフレッシュトークンとは何ですか?
アクセストークンが利用できなくなった際、新しいアクセストークンを取得するために利用されることがある情報です。
長期間アクセスにつながる重要な情報なので、安全な管理が必要です。
PKCEは必要ですか?
Authorization Codeを利用した現代的なOAuth実装では、PKCEを組み合わせる構成を基本候補として検討するとよいでしょう。
利用する認可サービスの公式ドキュメントや対応仕様も確認してください。
GoogleログインとOAuthは同じですか?
完全に同じではありません。
Googleアカウントを利用してユーザー本人をログインさせる用途では、OAuth 2.0に加えてOpenID Connectが関係します。
OAuthのトークンをデータベースへ保存してもよいですか?
連携を継続するために保存が必要なケースはあります。
ただし重要な秘密情報として扱い、
- 適切な保護
- アクセス制御
- ログへの非出力
- 連携解除時の処理
まで設計する必要があります。
OAuthは自分で実装できますか?
可能ですが、セキュリティ上の注意点が多いため、外部サービスの公式SDKや実績のあるライブラリを利用する方法をまず検討した方がよいでしょう。
hiro-dev-labではOAuthを含む外部API連携から相談できます
業務システムを開発していると、
「Googleカレンダーと連携したい」
「Microsoft 365の情報を取得したい」
「Slackへ自動通知したい」
「Googleアカウントでログインさせたい」
といった要求が出てくることがあります。
しかし、それぞれ必要な仕組みは同じではありません。
例えば、
- OAuth 2.0による認可
- OpenID Connectによるログイン
- APIキー
- Webhook
- サーバー間認証
など、目的に応じて適切な方式を選ぶ必要があります。
hiro-dev-labでは、単にOAuthのコードを実装するだけではなく、
- 現在の業務フローのヒアリング
- 外部サービス連携の要求整理
- OAuth 2.0を使うべきかの判断
- 必要スコープの整理
- 認証・認可設計
- Google API連携
- Microsoft API連携
- SlackなどSaaSとのAPI連携
- トークン管理
- 権限設計
- Webシステム設計・開発
- 業務自動化
など、実際の業務に合わせて必要な仕組みを整理できます。
例えば現在、
Googleカレンダー
↓
案件管理システム
へ同じ商談情報を二重入力しているなら、
案件管理システム
↓
OAuth連携
↓
Google Calendar API
↓
予定を自動登録
という仕組みに変更できる可能性があります。
重要なのは、
「OAuthを導入すること」
ではなく、
外部サービスとどの情報を、どの権限で、どのように連携したいのか
を整理することです。
まとめ
OAuth 2.0は、外部アプリケーションへユーザーのパスワードを渡さず、必要な範囲のアクセス権を委譲するための認可フレームワークです。
業務システムでは、
- Google Calendar
- Google Drive
- Microsoft 365
- Slack
- その他の外部SaaS
などと連携するときに利用することがあります。
OAuth 2.0を理解するときは、まず、
認証
→ あなたは誰か
認可
→ あなたは何をしてよいか
を分けることが重要です。
そのうえで、
- Client
- Authorization Server
- Resource Server
- アクセストークン
- リフレッシュトークン
- スコープ
- Authorization Code
- PKCE
- Redirect URI
などの役割を整理すると、OAuth 2.0の全体像が理解しやすくなります。
実際のシステム開発では、正常にAPIへアクセスできることだけでは不十分です。
トークンの期限切れ、権限取り消し、再認可、連携解除、必要最小限のスコープ、秘密情報の管理まで含めて設計する必要があります。
OAuth 2.0は一見複雑ですが、
「ユーザーが外部サービスへの一部の権限だけを、自社システムへ安全に渡す仕組み」
と考えるところから始めると理解しやすくなります。