@@ -46,24 +46,7 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
46
46
var signingKeys = SecretsUtility . GetTokenIssuerSigningKeys ( ) ;
47
47
if ( signingKeys . Length > 0 )
48
48
{
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 ) ;
67
50
if ( JwtGenerator . IsTokenValid ( token , validationParameters ) )
68
51
{
69
52
context . Request . SetAuthorizationLevel ( AuthorizationLevel . Admin ) ;
@@ -76,6 +59,40 @@ public Task AuthenticateAsync(HttpAuthenticationContext context, CancellationTok
76
59
77
60
public Task ChallengeAsync ( HttpAuthenticationChallengeContext context , CancellationToken cancellationToken ) => Task . CompletedTask ;
78
61
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
+
79
96
private static string IssuerValidator ( string issuer , SecurityToken securityToken , TokenValidationParameters validationParameters )
80
97
{
81
98
if ( ! validationParameters . ValidIssuers . Any ( p => string . Equals ( issuer , p , StringComparison . OrdinalIgnoreCase ) ) )
0 commit comments