IdentityServer ASP.NET Identityクイックスタートに基づいて.NETコアソリューションを作成しています。私は、IdentityServer、API、およびSPAクライアント用に別々のプロジェクトを使用しています。認証はうまくいきますが、システム全体のアーキテクチャのベストプラクティスやIdentityServerとAPIプロジェクト間のデータの共有に関する質問があります。Identity Serverで保護されたクライアント間でユーザー情報を共有
私は私の溶液中で、以下の単純化されたデータスキーマがあるとします。
class User : IdentityUser
{
public string FavoriteColor { get; set; }
}
class SomeObject
{
public string OwnerId { get; set; }
public virtual User Owner { get; set; }
}
は今ユーザーAは、IdentityServerのアカウント(とUser
レコード)を作成し、ハイブリッドの流れでログインし、取得し作成したとしAPIを使用して認証するために使用できるaccess_tokenその後、UserAはAPIのAPI/some objects
エンドポイントを呼び出し、すべてのSomeObject
のリストを返す必要があります。 SPAはSomeObject
のリストを各オブジェクトのSomeObject.Owner.FavoriteColor
プロパティを含むUserAに表示します。
SomeObject.Owner.FavoriteColor
データを返すには、User
ストアにアクセスする必要があります。ですから、私の質問はこれです:User
のデータをIdentityServerとAPIの間で共有するための推奨される方法は何ですか? IdentityServerが使用する同じユーザーデータにAPIがアクセスする必要がありますか?それぞれが同じデータベースを使用する必要があり、IdentityServerは単にUser
テーブルを使用し、APIはUser
とSomeObject
テーブルの両方を使用しますか?
基本的に、IdentityServer、API、およびSPAアーキテクチャでは、データベースはどのように適合しますか? 1つは共有ですか? 2つありますか? APIを使用してユーザーストアを確認するのがベストプラクティスである場合、APIにユーザー情報を格納するために追加のデータモデルが必要ですか?
ありがとうございました。
IdentityServerは認証/承認を処理するだけです。これはユーザー管理システムではありません。ユーザーを利用するフローで認証すると(つまり、クライアントがユーザーと同じではないため、クライアント認証のようなものではない)、ユーザーIDが返されます。このユーザーIDを使用してデータベースを適切に変更したり、データベースからそのIDを使用してユーザーを検索したりすることができます。したがって、一般的に、両方のシステムでデータベースにアクセスする必要があります。 –