5
5
using System . Collections . Generic ;
6
6
using System . Linq ;
7
7
using System . Net . Http . Headers ;
8
- using System . Text ;
9
8
using System . Threading ;
10
9
using System . Threading . Tasks ;
11
10
using System . Web . Http . Filters ;
@@ -50,8 +49,8 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
50
49
var validationParameters = new TokenValidationParameters ( )
51
50
{
52
51
IssuerSigningKeys = signingKeys ,
53
- ValidateAudience = true ,
54
- ValidateIssuer = true ,
52
+ AudienceValidator = AudienceValidator ,
53
+ IssuerValidator = IssuerValidator ,
55
54
ValidAudiences = new string [ ]
56
55
{
57
56
string . Format ( SiteAzureFunctionsUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) ) ,
@@ -76,5 +75,31 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
76
75
}
77
76
78
77
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
+ }
79
104
}
80
105
}
0 commit comments