@@ -18,19 +18,33 @@ def create_azure_backend(name, tenant, version=1, claims_options=None):
18
18
authorize_url = '{}{}/oauth2/authorize' .format (_BASE_URL , tenant )
19
19
token_url = '{}{}/oauth2/token' .format (_BASE_URL , tenant )
20
20
issuer_url = 'https://sts.windows.net/{}/' .format (tenant )
21
+ if claims_options is None :
22
+ claims_options = {
23
+ 'iss' : {
24
+ 'values' : [issuer_url ]
25
+ }
26
+ }
27
+
21
28
elif version == 2 :
22
29
authorize_url = '{}{}/oauth2/v2.0/authorize' .format (_BASE_URL , tenant )
23
30
token_url = '{}{}/oauth2/v2.0/token' .format (_BASE_URL , tenant )
24
31
issuer_url = '{}{}/v2.0' .format (_BASE_URL , tenant )
25
- else :
26
- raise ValueError ('Invalid version' )
27
32
28
- if claims_options is None :
29
- claims_options = {
30
- "iss" : {
31
- "values" : [issuer_url ]
33
+ if claims_options is None :
34
+
35
+ def validate_iss (claims , value ):
36
+ iss = 'https://login.microsoftonline.com/{}/v2.0' .format (claims ['tid' ])
37
+ return iss == value
38
+
39
+ claims_options = {
40
+ 'iss' : {
41
+ 'essential' : True ,
42
+ 'validate' : validate_iss ,
43
+ }
32
44
}
33
- }
45
+
46
+ else :
47
+ raise ValueError ('Invalid version' )
34
48
35
49
class AzureAD (OAuthBackend ):
36
50
OAUTH_TYPE = '2.0,oidc'
@@ -55,7 +69,16 @@ def parse_openid(self, token, nonce=None):
55
69
token .get ('access_token' ), nonce
56
70
)
57
71
58
- return AzureAD
72
+ class AzureADv2 (AzureAD ):
73
+ JWK_SET_URL = '{}{}/discovery/v2.0/keys' .format (_BASE_URL , tenant )
74
+
75
+ def profile (self , ** kwargs ):
76
+ return self .parse_openid (** kwargs )
77
+
78
+ if version == 2 :
79
+ return AzureADv2
80
+ else :
81
+ return AzureAD
59
82
60
83
61
84
Azure = create_azure_backend ('azure' , 'common' )
0 commit comments