SuiteCRMはAPIを持っており、外部システムからアクセスしてデータを取ってきたり、逆に更新ができたりします
もちろんそのためには相手先のシステムを認証する必要があるのでOAuth認証の設定が必要になります
OAuth認証設定手順
大まかな流れ
詳しくは以下に書かれています(英語です)
流れとしては以下の通り
- opensslのSuiteCRMサーバへのインストール
- SuiteCRMサーバでのキーペアの生成
- SuiteCRM管理画面でOAuth認証用のIDを生成
- アクセス元サーバでのアクセストークン取得リクエストのコードを記述
- アクセストークンを用いてSuiteCRMのAPIを利用する
アクセス許可の方式の選択
SuiteCRMのOAuthでは以下の二つの方法でアクセストークンを取得できます
- SuiteCRM内のアカウントのIDとパスワードを用いてトークンを生成する方法
- 独自のクライエントシークレットをSuiteCRMのアカウントに紐付けして、そのシークレットを利用してトークンを生成する方法
どちらを設定するかはSuiteCRMの管理画面でOAuth認証用のIDを生成する際に設定できます。
SuiteCRM、PHP、JWTのバージョンの問題
SuiteCRMの最新版はPHP8で動きますし、Dockerで提供されているImageもphp8ベースで提供されています。
しかし、SuiteCRMが利用しているJWTのバージョンが古いためにPHP8ではエラーが起きるというバグが発生しているようです。
対策方法
composerでlcobucci/jwtのバージョンを4.0.0以上に上げればいいようなのですが、lcobucci/jwtのバージョンを上げると、league/oauth2-serverもバージョンを上げる必要があります
league/oauth2-serverのバージョンも上げると今度はSuiteCRM側のコードでDeprecatedエラーが発生します
ってことで仕方なく、SuiteCRMを起動しているDockerイメージをBitnamiが提供しているものからphp7.4-apacheに変更して対応することにしました
まとめ
約半日ほど調査と対応に追われてしまいましたがなんとかアクセストークンが発行され、APIを利用できるようになりました。
SuiteCRMの公式ドキュメントを参考にしながら、色々やってみたいと思います。