55using System . Collections . Generic ;
66using System . Linq ;
77using System . Net . Http . Headers ;
8- using System . Text ;
98using System . Threading ;
109using System . Threading . Tasks ;
1110using System . Web . Http . Filters ;
@@ -50,8 +49,8 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
5049 var validationParameters = new TokenValidationParameters ( )
5150 {
5251 IssuerSigningKeys = signingKeys ,
53- ValidateAudience = true ,
54- ValidateIssuer = true ,
52+ AudienceValidator = AudienceValidator ,
53+ IssuerValidator = IssuerValidator ,
5554 ValidAudiences = new string [ ]
5655 {
5756 string . Format ( SiteAzureFunctionsUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) ) ,
@@ -76,5 +75,31 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
7675 }
7776
7877 public Task ChallengeAsync ( HttpAuthenticationChallengeContext context , CancellationToken cancellationToken ) => Task . CompletedTask ;
78+
79+ private static string IssuerValidator ( string issuer , SecurityToken securityToken , TokenValidationParameters validationParameters )
80+ {
81+ if ( ! validationParameters . ValidIssuers . Any ( p => string . Equals ( issuer , p , StringComparison . OrdinalIgnoreCase ) ) )
82+ {
83+ throw new SecurityTokenInvalidIssuerException ( "IDX10205: Issuer validation failed." )
84+ {
85+ InvalidIssuer = issuer ,
86+ } ;
87+ }
88+
89+ return issuer ;
90+ }
91+
92+ private static bool AudienceValidator ( IEnumerable < string > audiences , SecurityToken securityToken , TokenValidationParameters validationParameters )
93+ {
94+ foreach ( string audience in audiences )
95+ {
96+ if ( validationParameters . ValidAudiences . Any ( p => string . Equals ( audience , p , StringComparison . OrdinalIgnoreCase ) ) )
97+ {
98+ return true ;
99+ }
100+ }
101+
102+ return false ;
103+ }
79104 }
80105}
0 commit comments