다음을 통해 공유


CA5405: 항상 대리자에서 토큰 유효성 검사를 건너뛰지 않음

속성
규칙 ID CA5405
제목 항상 대리자에서 토큰 유효성 검사를 건너뛰지 마세요.
범주 보안
수정 사항이 호환성을 깨뜨리는지 여부 또는 무중단인지 여부 주요 변경 아님
.NET 10에서 기본적으로 사용하도록 설정 아니요
적용 가능한 언어 C# 및 Visual Basic

원인

AudienceValidator 또는 LifetimeValidator에 할당된 콜백은 항상 true을 반환합니다.

규칙 설명

중요한 TokenValidationParameter 검증 대리자를 항상 true를 반환하도록 설정하면 중요한 인증 보호 기능이 비활성화됩니다. 보호를 사용하지 않도록 설정하면 특정 발급자의 유효성 검사가 잘못되거나 토큰이 만료될 수 있습니다.

토큰 유효성 검사 모범 사례에 관한 자세한 내용은 라이브러리의 Wiki를 참조하세요.

위반 문제를 해결하는 방법

  • 대리자의 논리를 개선하여 일부 코드 경로가 true를 반환하지 않으면 해당 유형의 유효성 검사가 효과적으로 사용하지 않도록 설정됩니다.
  • 실패 사례에서는 유효성 검사를 실패시키려면 SecurityTokenInvalidAudienceException 또는 SecurityTokenInvalidLifetimeException를 throw하고, 다른 사례는 true를 반환하여 통과하게 합니다.

경고를 표시하지 않는 경우

추가 로깅에 대리자를 사용하고 특정 유형의 유효성 검사가 필요하지 않은 토큰 형식에 해당하는 일부 특정 사례에서는 이 경고를 표시하지 않는 것이 좋을 수 있습니다. 이 유효성 검사를 사용하지 않도록 설정하기 전에 보안에 미치는 영향을 완전히 파악해야 합니다. 장단점에 관한 내용은 토큰 유효성 검사 라이브러리의 Wiki를 참조하세요.

경고 표시 안 함

단일 위반을 억제하려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 비활성화한 후 다시 활성화하십시오.

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

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않으려면 구성 파일에서 none의 심각도를 설정합니다.

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

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

의사 코드 예제

위반

using System;
using Microsoft.IdentityModel.Tokens;

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

해결 방법

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;
        };
    }
}