0

API を保護するために Identity サーバーを使用しています。ApiResource を次のように定義しました。

return new List<ApiResource> 
        {
            new ApiResource
            {
                Name = "phone.api",
                ApiSecrets={new Secret("secret1".Sha256())},
                Scopes =
                {
                    new Scope()
                    {
                        Name = "phone.api.full_access",
                        DisplayName = "Full access to API"

                    },
                     new Scope
                    {
                        Name = "phone.api.write",
                        DisplayName = "Write and read access to API"
                    },
                    new Scope
                    {
                        Name = "phone.api.read",
                        DisplayName = "Read only access to API"
                    }
                }
                ,UserClaims=new List<string>()
                {
                    "roles",
                   // ClaimTypes.DateOfBirth
                }
            },

そして、このようなテストユーザー:

new TestUser
{
   SubjectId = "1",
   Username = "Billy Admin",
   Password = "password",
   Claims = new List<Claim>()  
   {
      new Claim("roles", "phone.api.admin"),
       new Claim(ClaimTypes.DateOfBirth,new DateTime(1900,10,10).ToString())
   }
 }

API は次のコードで保護されています。

services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = Config.AUTHAUTHORITY; //"http://localhost:4000";
                options.ApiName = "phone.api";
                options.ApiSecret = "secret1";
                options.RequireHttpsMetadata = false;
            });

client+ access_token (クレーム 'ClaimTypes.DateOfBirth' を含まない場合、API は自動的に機関サーバーのユーザー情報エンドポイントを呼び出して、余分なクレームを取得する必要があるかどうかという質問があります。余分なクレームが必要な理由は前にあります次のようないくつかのポリシーを確認します。

services.AddAuthorization(options =>
{
     options.AddPolicy("Only21", policy => policy.Requirements.Add(new MinimumAgeRequirement(21)));
} );

私のテストでは、userinfo エンドポイントを呼び出していないことがわかりました。その理由を知りたいのです。自分で呼び出す必要がありAuthorizationHandler<MinimumAgeRequirement>ますか?

どうもありがとう。

4

1 に答える 1