web-dev-qa-db-ja.com

ログインしたWordPressユーザーに第三者へのアクセスを許可する Laravel OAuthを介したAPI

私は可能であれば手助けをしたいという独特の状況があります。

私の会社は多くのWordPressサイトを管理しています。各サイトには独自のユーザーセットがあります(すべてのサイトで同じユーザーですが、一部のユーザーはXにのみアクセスし、他のユーザーはYにアクセスし、他のユーザーはX&Yなど)。私たちはカスタムSSOプラグインを使用して、パーミッションなどを使用してこれらすべてを管理します。これらはすべて完全に機能します。

私はLaravelで、パブリックルートとプライベートルートの両方を持つアプリを作成しました。プライベートルートにアクセスするにはLaravel Passport/OAuthを使用します。その面のすべても完璧に機能します。

しかし、私は今、WordPressユーザーが私のAPIのいくつかの保護されたルートにアクセスする必要があるという状況に悩まされています。

WP/OAuthへの関心の大部分は、OAuthサービスプロバイダ(Twitter/Google/LinkedIn/etc)を使ってWordPressにログインしたいという私の状況とは基本的に反対であることを知っています。

APIサイトとWordPressサイトはまったく異なるアーキテクチャでホストされており、どちらか一方のデータベースにアクセスする手段はありません。

私が探しているのは、私のWordPressユーザーが2セットの同じユーザーを維持する必要なしに、私のAPIで自分自身を「承認」するための簡単な方法です。理想的には、WordPressユーザーは必ずしもAPI内で作成されるわけではありませんが、監査ログを使用して、API内で誰が何をしているのかを追跡します。

どんな助け、または同様のボートの人々からの経験も素晴らしいでしょう!

1
Kingsley

私は興味を持っている人のためにこれとは少し違うアプローチをしました。

私は自分のAPIをできるだけ軽量にしておき、バージョン/リビジョンやユーザーに肥大させないようにしたかったので、2番目のLaravelインスタンスを作成しました。

この2番目のLaravelインスタンス(consumer)では、SSOプロバイダとして既にGoogleを使用しているので、Laravel Socialiteを使用しました。ユーザーがログインします。これは、ユーザーが私のAPIと対話する場所です。すべてのアクションはコンシューマーに記録され、私のAPI DBから除外されます。

consumer -> APIコミュニケーションのために、私は私のAPIにLaravel Passportをインストールし、password_clientを使用し、パスワードトークンをconsumerに格納し、私のconsumerの裏側でGuzzleを使用してAPIと話します。

WordPressの管理者メニューにconsumerアプリへのリンクを追加するためのWordPressプラグインを作成しました。ドメインの不一致が原因で、GoogleのSSO/OAuthログインページをiFrameに配置しようとしましたが、不可能です。

今はかなりうまくいきました!そのほとんどをWordPressのプラグインに変換したいのですが、ユーザーが編集/表示できるので、所有者/認証トークンをプラグインに保存したくはありません。

1
Kingsley