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
atauSecurityTokenInvalidLifetimeException
dalam kasus kegagalan ketika Anda ingin gagal validasi dan memiliki kasus lain lulus dengan mengembalikantrue
.
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;
};
}
}