2017-02-25 30 views
4

ASP.NET Core MVC WebアプリケーションでIdentityServer4を認証に使用したいと考えていますが、ユーザー登録プロセスは面倒です。ユーザー登録が必要なほとんどのWebサイトでは、ローカルユーザーアカウントを使用している場合は、別のサイト(Facebook、Twitterなど)からサインアップするようにリダイレクトしません。IdentityServer4を使用したユーザー登録プロセス

解決策の1つは、MVCクライアントと同じプロセスでIdentityServer4をホストすることですが、これはお勧めできません。

IdentityServer4にローカルユーザー登録の実際の例はありますか?

+0

MVCアプリケーションでASP.NET IDを使用するだけではどうですか? IdentityServerは必要ありません(何かが分からない限り)。 IdSは、多くのapis(a.k.aリソース)にアクセスする多くのアプリケーション(a.k.a.クライアント)にまたがって独立した認証/認可サーバーを必要とする場合に必要です。 –

+0

私はそうは思わない。しかし、IDSと並んでユーザーを登録するAPIを作成することを止めるものはありません。 – Lutando

答えて

6

IdentityServerは、新しいユーザーを実際に作成するのではなく、既存のユーザーを認証するためのものです。私たちのユースケースには 、私たちは役割を果たして3つのプロジェクトを持っている:

  • 保護されたAPI
  • アイデンティティプロバイダ(ASPNETコアアイデンティティ)プロジェクト

ユーザーであるアイデンティティサーバーIDプロバイダに適切な構造を作成するAPIの呼び出しによって作成されます。 IDサーバーは、トークンの要求を検証するときにIDサーバーを呼び出します。 APIはIDサーバを使用してリソースを保護し、IDプロバイダはクレーム(権限など)に含まれていないユーザーについて必要な情報を取得します。

このように、アイデンティティ・プロバイダを複数のプロジェクト(1つのユーザー・ベースが異なるロール)で共有でき、アイデンティティ・サーバーは純粋にユーザーを認証するためのものです。すべてのユーザ管理の機能は他の場所に属します。


EDIT:ちょうどASPNETコア・アイデンティティ・フレームワーク(http://odetocode.com/blogs/scott/archive/2013/11/25/asp-net-core-identity.aspx)を使用して:私たちは何も特に画期的をやっていない @peyman。

IUserStoreおよびUserManagerがこの主な要因です。ユーザーが作成されると、役割が割り当てられます。役割は、どのアプリケーションがそのユーザーの作成を要求したかに基づいています。 IUserStoreの実装は、アイデンティティを検証するときに最終的にIdentityServerによって呼び出されるものであり、提供されたデータは、IdentityServerによって要求を構築するために使用されます。私たちのリソースAPIは、クレームベースの承認のためにPolicieshttps://docs.microsoft.com/en-us/aspnet/core/security/authorization/claims)を使って比較的単純に保護されています

+0

これは本当に役に立ちます。 IdentityServerを使用してアイデンティティとアクセストークンの両方を発行する流れ、アプリケーション固有の権限からユーザIDを分離する方法などを視覚化するのはまだ苦労しています。したがって、IdentityServerはIdentityProviderを呼び出します。あなたのアイデンティティプロバイダは、別のAPIかメインのasp.netウェブサイトの一部ですか?その後、あなたのアイデンティティプロバイダをどのように保護しますか? – DMannion

+0

私たちの特定のケースでは、アイデンティティプロバイダは、公開インフラストラクチャではないインフラストラクチャ上のAPIであり、プレゼンテーションインフラストラクチャからのみ呼び出すことができます。しかし、他のアーキテクチャーも可能です。IdentityServerの一部としてアイデンティティ・プロバイダーを持つ人もいます。これを自分でやっているわけではありませんが、他のapis/sitesへのアクセスを可能にするために新しいエンドポイント(オープンなもの、保護されたもの)を提供しているとしか推測できません。 – Mashton

+0

こんにちは@Mashton、私は別のデータベースを持つ複数のプロジェクト(aps.netフォームサイト)とSaasアプリケーションを持っていて、単一のIDPを使用したいが、ユーザーの検証のために私はIDPがそれぞれのデータベースに接続したい似たようなシナリオを持っています。だから、クライアントに基づいてこれにアプローチする方法がわからないのですか? – cvetyab

関連する問題