シュッと GPTs の API に OAuth 認証をつけようと試みた話
ちゃっす(/・ω・)/
GPTs のアクションとして API を定義することができるでござんす
何かというと、「例えば今日の東京のお天気いかが?」と聞いた場合にお天気情報を答えてくれる API を事前に定義しておくことで LLM (ChatGPT) が考えるのではなく東京のお天気を API 経由で取得できるっちゅーことですな(/・ω・)/
で、こういった API を使う場合に OAuth 認証がつけられるみたいなので特定の認証を受けたユーザーのみ使えるようにできるかしら?
ということを調べたみた
という話。
先に結論を書いておくとうまくいきまへんでした(/・ω・)/
ので、失敗談?である
GPTs を作る画面の一番下に Add actions がありますわね(/・ω・)/

ポチってみると Authentication というところがありんす

んで、OAuth を選択すると設定ができるぞ☆

まぁとりあえず Google の OAuth でもつけるかっちゅーことで

でキーを発行しまぁ~す
(やり方はググったり ChatGPT に聞くと教えてくれるよ
んで、発行された Client ID と Client Secre を設定しまぁ~す
そして、Google の場合
Authorization URL: https://accounts.google.com/o/oauth2/auth
Token URL: https://oauth2.googleapis.com/token
なのでこれを設定しまぁ~す
んで、GPTs のアクションの他の項目を適当に埋めまぁ~す

まぁこれでいけるでしょう(/・ω・)/
と思ったが

ドメインがそろってないからダメ~~~
って怒られる( ・ω・)
積んだ。
と思ったのでございますが一筋の光が OpenAI の Dev Forum に、、、
無理やりURL 短縮サービス使ってドメイン揃えりゃいいやんというアイディア、、、孔明現る(/・ω・)/
ので、全部 URL を短縮して実行!!
失敗!!

一応認証画面に飛ばそうと試みてくれるの駄菓子菓子エラーになるでござんす( ・ω・)
ブラウザ DevTools でネットワークログを確認したところ、URL を短縮したことでほんとにアクセスしたいところにリダイレクトがかかるのでございます(/・ω・)/
今回認証で使いたい URL は https://accounts.google.com/o/oauth2/auth でございまして、こちらの利用にあたっては必要なパラメータを URL に追加する必要があるのだ(/・ω・)/
で、そのパラーメータがリダイレクトするときに消滅していたのだ(/・ω・)/
っちゅーことで
短縮 URL を作成する時点で無理やりフルフルのパラメータをつけるようにしてみた
こういう感じ
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=hoge.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fchat.openai.com%2Faip%hoge%2Foauth%2Fcallback&scope=openid&state=hoge
とするとちゃんと Google 認証の画面が表示されて自分のアカウントを選択できるようになったぞ☆
駄菓子菓子
次のエラーに遭遇するのであった

流れとしては
ブラウザ認証ボタンぽち~
Google 認証画面が出てくる
認証ぽち~
ChatGPT の画面にリダイレクト
ChatGPT がサーバー(OpenAI) にリクエスト
https://oauth2.googleapis.com/token に確認リクエストを OpenAI が実施
となっている(はず)でありんすが
エラーメッセージを見る限り https://oauth2.googleapis.com/token のレスポンスがエラーを返していそう(詳細はサーバー側で行われているのでわからぬ)( ・ω・)
ただまぁ、おそらく https://oauth2.googleapis.com/token にアクセスする際にもシークレットキーとかパラメーターを渡す必要があるのだけれど、前述のように短縮 URL を使用していてリダイレクトがかかるので必要な情報が不足した状態で Token を発行しにいってる気がする(/・ω・)/
で、ここにきて本当の積みである(/・ω・)/
もろもろの処理を自前の API に実装してドメインを共通にすればまぁいけるのかもしれませんが非常に面倒なので検証はここまで。
おしまい。