@@ -46,24 +46,7 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
4646 var signingKeys = SecretsUtility . GetTokenIssuerSigningKeys ( ) ;
4747 if ( signingKeys . Length > 0 )
4848 {
49- var validationParameters = new TokenValidationParameters ( )
50- {
51- IssuerSigningKeys = signingKeys ,
52- AudienceValidator = AudienceValidator ,
53- IssuerValidator = IssuerValidator ,
54- ValidAudiences = new string [ ]
55- {
56- string . Format ( SiteAzureFunctionsUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) ) ,
57- string . Format ( SiteUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) )
58- } ,
59- ValidIssuers = new string [ ]
60- {
61- AppServiceCoreUri ,
62- string . Format ( ScmSiteUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) ) ,
63- string . Format ( SiteUriFormat , ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) )
64- }
65- } ;
66-
49+ var validationParameters = CreateTokenValidationParameters ( signingKeys ) ;
6750 if ( JwtGenerator . IsTokenValid ( token , validationParameters ) )
6851 {
6952 context . Request . SetAuthorizationLevel ( AuthorizationLevel . Admin ) ;
@@ -76,6 +59,40 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
7659
7760 public Task ChallengeAsync ( HttpAuthenticationChallengeContext context , CancellationToken cancellationToken ) => Task . CompletedTask ;
7861
62+ internal static TokenValidationParameters CreateTokenValidationParameters ( SymmetricSecurityKey [ ] signingKeys )
63+ {
64+ string siteName = ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteName ) ;
65+ string runtimeSiteName = ScriptSettingsManager . Instance . GetSetting ( AzureWebsiteRuntimeSiteName ) ;
66+ var audiences = new List < string >
67+ {
68+ string . Format ( SiteAzureFunctionsUriFormat , siteName ) ,
69+ string . Format ( SiteUriFormat , siteName )
70+ } ;
71+
72+ if ( ! string . IsNullOrEmpty ( runtimeSiteName ) && ! string . Equals ( siteName , runtimeSiteName , StringComparison . OrdinalIgnoreCase ) )
73+ {
74+ // on a non-production slot, the runtime site name will differ from the site name
75+ // we allow both for audience
76+ audiences . Add ( string . Format ( SiteUriFormat , runtimeSiteName ) ) ;
77+ }
78+
79+ var validationParameters = new TokenValidationParameters ( )
80+ {
81+ IssuerSigningKeys = signingKeys ,
82+ AudienceValidator = AudienceValidator ,
83+ IssuerValidator = IssuerValidator ,
84+ ValidAudiences = audiences ,
85+ ValidIssuers = new string [ ]
86+ {
87+ AppServiceCoreUri ,
88+ string . Format ( ScmSiteUriFormat , siteName ) ,
89+ string . Format ( SiteUriFormat , siteName )
90+ }
91+ } ;
92+
93+ return validationParameters ;
94+ }
95+
7996 private static string IssuerValidator ( string issuer , SecurityToken securityToken , TokenValidationParameters validationParameters )
8097 {
8198 if ( ! validationParameters . ValidIssuers . Any ( p => string . Equals ( issuer , p , StringComparison . OrdinalIgnoreCase ) ) )
0 commit comments