web-dev-qa-db-ja.com

OAuth2データをMongoに保存していますか?

私たちのシステムにはユーザーがいますが、おそらく一部のユーザーがAPIサービスを使用できるようにしたいと考えています。承認にOAuth2を使用することを検討しています。 (信頼された)マシン間アクセスになるので、クライアント資格情報を使用することも考えました。

したがって、たとえば、APIを使用して記事を作成する場合、作成者(ユーザー)が必要です。では、APIアクセスを許可された各ユーザーのユーザーコレクションに、アクセストークン、認証トークン、クライアント資格情報を保存するのでしょうかこれは良い習慣ですか?

ユーザーコレクション:

[
    {
        "_id": MongoId("uguifdguioei..."),
        "username": "joe.sixpack",
        .
        .
        "oauth": {
            "client_id": "1234567890",
            "client_secret": "qwertyuiop1234567890",
            "access_token": "8sf989dgd9fgdjkngf77y3retr8ghujker",
            "refresh_token": "usknfgeor..."
        }
    },
    .
    .
    .
]

別の(MySQL)プロジェクトでは、追加のテーブル(oauth_clients、oauth_scopes、oauth_access_tokens "など)をたくさん持っていますが、新しいコレクションをたくさん作成することは避けたいと思います。また、mongoを使用すると、ネストされたデータを利用できます。

また、oauthのようなものをユーザーに添付すると、スコープではなく)アプリのACLを使用して認証を行い、oauth storage for認証コード、アクセストークン、更新トークンなどを発行して検証するだけです。

私はまだ開発を始めていません。Oauthものを処理するためのクリーンな方法を見つけようとしています。この実装に関するフィードバックをいただければ幸いです。ありがとう

5
Martyn

1)機密情報は常に暗号化する必要があります。あなたの例から、秘密はプレーンテキストになります

2)シークレットを使用してユーザーテーブルのマイクを作成しません。ユーザーデータをユーザーオブジェクトに読み取っているとすると、誰かがオブジェクト全体をログに記録するログ行を追加します=>プレーンテキストの秘密をログに記録します。それらを個別に処理する方がはるかに良いでしょう

1
Stefan Gilca