Dapatkah seseorang memberi tahu saya cara kerja [Authorize(Policy = "PolicyName")], ketika pengguna tidak masuk mengapa kebijakan berjalan? misalnya jika saya mengembalikan 'benar' dari delegasi, tindakan, atau pengontrol metode .RequireAssertion dapat diakses bahkan pengguna adalah pengguna anonim?

[Authorize]
[Authorize(Policy = "TestAccess")]
public async Task<IActionResult> Test()
{
   return Json("Test Actioned Reached");
}

Mengapa atribut [Otorisasi] diperlukan di sini? jika [Authorize(Policy = "TestAccess")] berarti bahwa - tindakan/pengontrol akan tercapai ketika pengguna bukan pengguna anonim DAN kebijakan ini diteruskan?

Jika saya menulis:

[Authorize(Policy = "TestAccess")]
public async Task<IActionResult> Test()
{
    return Json("Test Actioned Reached");
}

Dan kebijakan terlihat seperti itu:

services.AddAuthorization(options => {
options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context =>
   {
       return true;  // For Testing only

   }));
});

Test() tindakan akan tercapai bahkan pengguna adalah pengguna anonim. apa ini yang terjadi? Maaf untuk bahasa Inggris saya yang buruk. Terima kasih.

0
Nick Money 21 September 2019, 15:45

1 menjawab

Jawaban Terbaik

Coba kode di bawah ini

 services.AddAuthorization(options => {
                    options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context => context.User.HasClaim("your claim type ","your claim value")));
                });

Kode Anda cukup menambahkan true di Requirement Pipeline

services.AddAuthorization(options => {
options.AddPolicy("TestAccess", policy => policy.RequireAssertion(context =>
   {
       return true;  // For Testing only

   }));
});

Kode di atas tambahkan true dalam pipa handler dan true memenuhi semua kondisi termasuk pengguna anonim juga.

Untuk lebih detail silakan lihat metode kode src

public AuthorizationPolicyBuilder RequireAssertion(Func<AuthorizationHandlerContext, bool> handler)
        {
            if (handler == null)
            {
                throw new ArgumentNullException(nameof(handler));
            }

            Requirements.Add(new AssertionRequirement(handler));
            return this;
        }

AuthorizationPolicyBuilder.cs

0
Arvind Maurya 21 September 2019, 13:58