私は現在、Web APIとMVC UI(最終的には同じAPIと通信できるモバイルUIも持つ)を使用して新しいプロジェクトを設定しています。IdentityServer4 - APIのユーザー権限
- ユーザーが自身のアプリケーションに追加されたログインまたは
- IdentityServerユーザーをサインアップするIdentityServer4サーバーにそれらを脱ぐMVC UIにナビゲート:
だから、私は、次の計画を持っています
- 権限はその後、自分のアクセスを制限するために、ユーザーに設定することができ データベースのユーザテーブルは
これは、IDサーバだけでは、アイデンティティ・サーバーであることを意味する(と私ans私は人々が自分の役割とアクセス許可を心配することなく、Googleなどを介してログインすることができます)。
上記を達成するには、クライアントではなくAPIに対するユーザーのアクセス許可を確認する必要があります(クライアントはウェブ、電話アプリ、JavaScriptクライアントなど何でもかまいません)ユーザーのアクセス許可を処理するためのもの)。
APIでは、私はPermissionhandlerとPermissionRequirement認証ポリシーを実装しました。だから、APIコントローラやメソッドでは、私は[Authorize(Policy = "CreateUser")]のようにすることができます。システム権限ごとにポリシーを設定する必要があるようです。
だから、認可ハンドラで私のことを行う必要があります
- 彼らはアプリのデータベースに存在した場合はそうでない場合は、その権限と認証を確認するか、
- を拒否
- 現在のユーザーのユーザー名を取得します。アプリケーションデータベースに存在する場合は、後で管理パネルからアクセス権を設定することができます。
これは、ユーザーのユーザー名をIDエバー。私はそれを行うためにUserInfoClientを使用する必要があると理解していますが、ユーザーのトークン/資格情報を使用してIDサーバーからクレームを取得する方法や、少なくともUser.Identity.Nameを取得する方法を理解することはできません。
私はサブIDを使用してアプリケーションデータベースにユーザーを追加できますが、権限を管理している人はその人が誰なのか分からないので、実際に電子メールを使用する必要があります。
MVCクライアントでは、User.Identity.Nameが問題なく表示されますが、そのAPIの値はnullです。
私の質問は、現在のユーザーのIdentity.Name、username、またはEメールをAPI内からどのように取得するのですか?
ありがとうございました。
私は自分のアプリケーションの別の層(すなわち、別のプロジェクト)で私の承認ハンドラを持っているので、私はそのようにするHttpContextにアクセスすることはできません。私はAuthorizationHandlerContextにアクセスできますが、HttpContextにアクセスできるかどうかはわかりません。私は間違っているかもしれません。 – Craig