2017-11-19 18 views
0

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はUserSomeObjectテーブルの両方を使用しますか?

基本的に、IdentityServer、API、およびSPAアーキテクチャでは、データベースはどのように適合しますか? 1つは共有ですか? 2つありますか? APIを使用してユーザーストアを確認するのがベストプラクティスである場合、APIにユーザー情報を格納するために追加のデータモデルが必要ですか?

ありがとうございました。

+1

IdentityServerは認証/承認を処理するだけです。これはユーザー管理システムではありません。ユーザーを利用するフローで認証すると(つまり、クライアントがユーザーと同じではないため、クライアント認証のようなものではない)、ユーザーIDが返されます。このユーザーIDを使用してデータベースを適切に変更したり、データベースからそのIDを使用してユーザーを検索したりすることができます。したがって、一般的に、両方のシステムでデータベースにアクセスする必要があります。 –

答えて

1

私は2つのうちの1つを行います。

1.)ユーザーマネージャーの対話とビジネスロジックをカプセル化する新しいプロジェクトを作成します。 APIとIdentityServer4の実装にNuGetパッケージとしてこれを含めます。

2.)現在のAPIがユーザーの詳細を取得し、新しいAPIに#1のNugetパッケージを使用させる新しいユーザーマネージャーAPIを作成します。

関連する問題