私はIdentity Server 4の新しい人です。ApiScopeのコンセプトは不明です。もっと詳しく説明できますか?そして、それをどのように実際に適用することができますか?Identity Server 4 - 実際のユースケースでApiScopeを適用するにはどうすればよいですか?
例:Web APIには以下のモジュールがありますが、モジュールへのアクセスを制限したいのですが、それに基づいていますか?それが可能な場合、どのように我々は
私はIdentity Server 4の新しい人です。ApiScopeのコンセプトは不明です。もっと詳しく説明できますか?そして、それをどのように実際に適用することができますか?Identity Server 4 - 実際のユースケースでApiScopeを適用するにはどうすればよいですか?
例:Web APIには以下のモジュールがありますが、モジュールへのアクセスを制限したいのですが、それに基づいていますか?それが可能な場合、どのように我々は
スコープは、あなたが細分化してフィット(またはしない)を参照してくださいどのようにあなたのAPIのリソースを使用することができます抽象的な概念で、システム
Scopes =
{
new Scope()
{
Name = "accountmanagement",
DisplayName = "Account management api",
},
new Scope()
{
Name = "stockmanagement",
DisplayName = "Account management api",
}
}
おかげでそれを設定することができます。たとえば、あなたが持っているかもしれません:
はあなたのクライアント(s)はClient
オブジェクトにAllowedScopes
を使用して、へのアクセス権を持つスコープを指定します。したがって、「MyApiUser」スコープと「MyApiUser」スコープと「MyApiAdmin」スコープの両方を使用できる別のクライアントのみを使用できるクライアントがあるとします。
スコープは、user
の機能、client
の機能を使用しています。は、の機能ではありません。
リソースをどのように分割するかは、あなた次第です。
UseIdentityServerAuthentication
にはAllowedScopes
を定義する必要があります。これにより、APIがアクセストークン内で受け入れるスコープを知ることができます。複数のスコープを受け入れるAPIがあり、アクセストークンのスコープに基づいてエンドポイントへのアクセスを制御したい場合(APIがそれぞれ異なるスコープを持つ複数のクライアントをサポートしているため)Claims
に基づいてPolicies
を定義できますクレームとしてまとめられています)。
良い読み取りがここで見つけることができます:あなたは全体ではなく、アプリケーションのために、特定のユーザーに基づいて、モジュールへのアクセスを制限することができるようにしたい理解した後https://leastprivilege.com/2015/12/28/validating-scopes-in-asp-net-4-and-5/
多くのありがとう、それは私には便利です –
を - ユーザの請求項によって達成することができます(最も一般的な実装はrole
の主張です)。
ユーザーごとにロールを保存できます。AccountManager
またはStockManager
(またはその両方)です。 次に、新しいApiResource
を少なくとも1つのScope
と定義し、そのスコープにはUserClaims
が含まれます(ユーザーのチェックを管理するクレーム)。
new ApiResource
{
Name = "rolesResource",
DisplayName = "Roles",
Scopes = {
new Scope
{
Name = "roles",
DisplayName = "User Roles",
Description = "A list of all the roles assigned to the user",
Required = true,
UserClaims =
{
JwtClaimTypes.Role
}
}
}
}
- あなたのクライアントは、その特定のroles
範囲に
new Client
{
ClientId = "your_client_id",
// More configuration...
AllowedScopes = {
// Whatever scopes needed and...
"roles"
}
},
を求めることができるクライアントがアクセストークンを要求するとき、それは、関連する役割を持っており、あなたのコントローラ/アクションを確認するためにAuthorizationAttribute
を使用することができます各ユーザが所望のアクセスレベルを有することを保証する。
[Authorize(Roles = "AccountManager")]
public class AccountController : ControllerBase
{
[HttpGet]
public IActionResult Get()
{
}
[Authorize(Roles = "StockManager")]
public IActionResult OnlyAccessibleForBothAccountManagerAndStockManager { }
}
私はあなたが何を求めているのかよく分かりませんでした。クライアント全体のモジュールアクセスを制限しますか?アプリケーション全体が在庫管理を消費することはできません**またはユーザーごとに制限する必要があります。つまり、ユーザーAはアカウント管理にアクセスでき、ユーザーBは在庫管理にアクセスできる、ユーザーCは両方にアクセスすることはできません... – DotnetProg
元、私はユーザーごとにそれを制限したいと思います。しかし、以下の答えでは、範囲はクライアントのためだけです。ありがとう。 –
[OK] - ユーザーごとのアクセスを制限したい場合は、その達成方法を説明した回答を投稿しました – DotnetProg