7
7
using System . Net ;
8
8
using System . Net . Http ;
9
9
using System . Net . Http . Headers ;
10
+ using System . Text ;
10
11
using System . Threading ;
11
12
using System . Threading . Tasks ;
12
13
using System . Web . Http . Controllers ;
15
16
using Microsoft . Azure . WebJobs . Extensions . Http ;
16
17
using Microsoft . Azure . WebJobs . Script . WebHost ;
17
18
using Microsoft . Azure . WebJobs . Script . WebHost . Filters ;
19
+ using Microsoft . Azure . WebJobs . Script . WebHost . Security ;
18
20
using Microsoft . IdentityModel . Tokens ;
19
21
using Xunit ;
20
22
using static Microsoft . Azure . WebJobs . Script . Config . ScriptSettingsManager ;
@@ -26,6 +28,7 @@ namespace Microsoft.Azure.WebJobs.Script.Tests.Filters
26
28
public class JwtAuthenticationAttributeTests : IDisposable
27
29
{
28
30
private const string TestKeyValue = "0F75CA46E7EBDD39E4CA6B074D1F9A5972B849A55F91A248" ;
31
+ private const string PlatformDefaultKeyValue = "B77F872A341F8970D50F093E1FA924777A5A61CCABC63C2A" ;
29
32
private const string TestAppName = "testsite" ;
30
33
private TestScopedEnvironmentVariable _testEnv ;
31
34
@@ -34,6 +37,7 @@ public JwtAuthenticationAttributeTests()
34
37
var values = new Dictionary < string , string >
35
38
{
36
39
{ "AzureWebEncryptionKey" , TestKeyValue } ,
40
+ { EnvironmentSettingNames . WebsiteAuthEncryptionKey , PlatformDefaultKeyValue } ,
37
41
{ AzureWebsiteName , TestAppName }
38
42
} ;
39
43
_testEnv = new TestScopedEnvironmentVariable ( values ) ;
@@ -56,12 +60,27 @@ public async Task AuthenticateAsync_WithValidToken_SetsAdminAuthorizationLevel(s
56
60
{
57
61
issuer = issuer ?? string . Format ( ScmSiteUriFormat , Instance . GetSetting ( AzureWebsiteName ) ) ;
58
62
audience = audience ?? string . Format ( SiteAzureFunctionsUriFormat , Instance . GetSetting ( AzureWebsiteName ) ) ;
59
-
60
- string token = JwtGenerator . GenerateToken ( issuer , audience , expires : DateTime . UtcNow . AddMinutes ( 10 ) ) ;
63
+ string token = JwtTokenHelper . CreateToken ( DateTime . UtcNow . AddMinutes ( 10 ) , audience , issuer ) ;
61
64
62
65
await AuthenticateAsync ( token , headerName , AuthorizationLevel . Admin ) ;
63
66
}
64
67
68
+ [ Theory ]
69
+ [ InlineData ( "AzureWebEncryptionKey" , true ) ]
70
+ [ InlineData ( "AzureWebEncryptionKey" , false ) ]
71
+ [ InlineData ( EnvironmentSettingNames . WebsiteAuthEncryptionKey , true ) ]
72
+ public async Task AuthenticateAsync_WithValidToken_WithSupportedKeyConfigurations_SetsAdminAuthorizationLevel ( string keyName , bool hexEncoding )
73
+ {
74
+ string issuer = "https://testsite.azurewebsites.net" ;
75
+ string audience = "https://testsite.azurewebsites.net" ;
76
+
77
+ string keyValue = Environment . GetEnvironmentVariable ( keyName ) ;
78
+ byte [ ] key = hexEncoding ? keyValue . ToKeyBytes ( ) : Encoding . UTF8 . GetBytes ( keyValue ) ;
79
+ string token = JwtTokenHelper . CreateToken ( DateTime . UtcNow . AddMinutes ( 10 ) , audience , issuer , key ) ;
80
+
81
+ await AuthenticateAsync ( token , ScriptConstants . SiteTokenHeaderName , AuthorizationLevel . Admin ) ;
82
+ }
83
+
65
84
[ Theory ]
66
85
[ InlineData ( - 10 , null , null ) ] // Our default clock skew setting is 5 minutes
67
86
[ InlineData ( 10 , "invalid" , null ) ]
0 commit comments