ソーシャル認証を使えば、Twitter/Facebook/Google/Appleなどをサービスプロバイダーとして、OAuth認証が可能です。これを使えばパスワードを管理することなく、ユーザにとってもスムーズで利用しやすい認証機能が提供できます。
このソーシャル認証に関するデータは会員管理の authData フィールドに入っています。この記事では、それを非公開にするメリット/デメリットについて解説します。
デフォルトは公開
authDataはデフォルトでは公開になっています。管理画面であれば、次のように表示されています。
ここで、任意のユーザデータを全体読み込み可能にして、外部から取得してみます。結果は次のようなJSONになります。
User { authData: { google: { id: '117...676', displayName: 'Atsushi Nakatsugawa', access_token: 'ya29.a...IrM' } }, objectId: 'duQSOhEj18hBxPbF', userName: 'RRsRCVLN7M', mailAddress: null, mailAddressConfirm: false, createDate: '2020-10-22T07:47:39.795Z', updateDate: '2020-10-23T05:10:11.666Z', acl: Acl { duQSOhEj18hBxPbF: { read: true, write: true }, '*': { read: true } } }
非公開にする設定方法
ではアプリ設定に移動して、SNS連携の一番下にある 会員管理 SNS認証データ
の SNS認証データ
を含めないに指定しましょう。
同様にデータを取得すると、次のようにauthDataが返ってこないデータになります。
User { objectId: 'duQSOhEj18hBxPbF', userName: 'RRsRCVLN7M', mailAddress: null, mailAddressConfirm: false, createDate: '2020-10-22T07:47:39.795Z', updateDate: '2020-10-23T05:10:11.666Z', acl: Acl { duQSOhEj18hBxPbF: { read: true, write: true }, '*': { read: true } } }
設定をすると、管理画面上でもauthDataが見られなくなります。
メリット
一番大きなメリットはauthDataに含まれるトークンが非公開になるということです。トークンを使うと、そのソーシャルサービス上でデータをポストしたり、逆に削除することもできます(OAuthプロバイダーの設定によります)。不正な操作を防止するためにもauthDataは非公開にすべきです。
デメリット
逆にアプリ側でトークンを利用したい場合に、使えなくなるというデメリットがあります。ソーシャルサービスと連携したアプリの場合、トークンの利用は欠かせないでしょう。
お勧め
会員データを全体に対して読み込み可能とする場合(フォロー/フォロワーや、会員一覧画面、会員プロフィール画面などを作る場合)は、authDataは非公開にしましょう。万一漏洩することがあれば、不正な操作につながる可能性があります。
そしてトークンを利用する場合には、別なクラス(Tokenクラスなど)を作成して、そこにユーザデータと紐付けた形で保存しましょう。そのデータはもちろんユーザ自身のみ読み込み、書き込み可能とします。
まとめ
authDataにはソーシャル認証や匿名認証で使われる大事なデータが保存されています。不用意に公開することがないよう、取得自体できないようにするのが安全です。ぜひご検討ください。