Bagikan melalui


CA5405: Jangan selalu melewatkan validasi token dalam delegasi

Properti Nilai
ID Aturan CA5405
Judul Jangan selalu melewati validasi token di delegasi
Golongan Keamanan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 9 No

Penyebab

Panggilan balik yang ditetapkan ke AudienceValidator atau LifetimeValidator selalu mengembalikan true.

Deskripsi aturan

Dengan mengatur delegasi validasi penting TokenValidationParameter untuk selalu mengembalikan true, perlindungan autentikasi penting dinonaktifkan. Menonaktifkan perlindungan dapat menyebabkan validasi token yang salah dari penerbit atau token yang kedaluwarsa.

Untuk informasi selengkapnya tentang praktik terbaik untuk validasi token, lihat wiki pustaka.

Cara memperbaiki pelanggaran

  • Tingkatkan logika delegasi sehingga tidak semua jalur kode mengembalikan true, yang secara efektif menonaktifkan jenis validasi tersebut.
  • Melemparkan SecurityTokenInvalidAudienceException atau SecurityTokenInvalidLifetimeException dalam kasus kegagalan ketika Anda ingin gagal validasi dan memiliki kasus lain lulus dengan mengembalikan true.

Kapan harus menekan peringatan

Dalam beberapa kasus tertentu di mana Anda menggunakan delegasi untuk pengelogan tambahan dan itu untuk jenis token di mana jenis validasi tertentu tidak diperlukan, mungkin masuk akal untuk menekan peringatan ini. Sebelum Anda menonaktifkan validasi ini, pastikan Anda telah sepenuhnya memikirkan implikasi keamanan. Untuk informasi tentang trade-off, lihat wiki pustaka validasi token.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA5405
// The code that's violating the rule is on this line.
#pragma warning restore CA5405

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA5405.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Contoh kode semu

Pelanggaran

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) => { return true; };
    }
}

Solusi

using System;
using Microsoft.IdentityModel.Tokens;

class TestClass
{
    public void TestMethod()
    {
        TokenValidationParameters parameters = new TokenValidationParameters();
        parameters.AudienceValidator = (audiences, token, tvp) =>
        {
            // Implement your own custom audience validation
            if (PerformCustomAudienceValidation(audiences, token))
                return true;
            else
                return false;
        };
    }
}