44from office365 .runtime .auth .providers .saml_token_provider import SamlTokenProvider
55from office365 .runtime .auth .token_response import TokenResponse
66from office365 .runtime .auth .user_credential import UserCredential
7+ from office365 .runtime .compat import get_absolute_url
78
89
910class AuthenticationContext (object ):
1011
11- def __init__ (self , authority_url ):
12+ def __init__ (self , url ):
1213 """
1314 Authentication context for SharePoint Online/OneDrive For Business
1415
15- :param str authority_url : authority url
16+ :param str url : Absolute Web or Site Url
1617 """
17- self .authority_url = authority_url
18+ self .url = url . rstrip ( "/" )
1819 self ._provider = None
1920
2021 def with_client_certificate (self , tenant , client_id , thumbprint , cert_path , ** kwargs ):
@@ -30,7 +31,8 @@ def with_client_certificate(self, tenant, client_id, thumbprint, cert_path, **kw
3031 def _acquire_token_for_client_certificate ():
3132 authority_url = 'https://login.microsoftonline.com/{0}' .format (tenant )
3233 credentials = {"thumbprint" : thumbprint , "private_key" : open (cert_path ).read ()}
33- scopes = kwargs .get ('scopes' , ["{url}/.default" .format (url = self .authority_url )])
34+ resource = get_absolute_url (self .url )
35+ scopes = kwargs .get ('scopes' , ["{url}/.default" .format (url = resource )])
3436 import msal
3537 app = msal .ConfidentialClientApplication (
3638 client_id ,
@@ -40,25 +42,23 @@ def _acquire_token_for_client_certificate():
4042 result = app .acquire_token_for_client (scopes )
4143 return TokenResponse .from_json (result )
4244
43- self .register_provider (_acquire_token_for_client_certificate )
45+ self .with_access_token (_acquire_token_for_client_certificate )
4446 return self
4547
46- def register_provider (self , credentials_or_token_func , ** kwargs ):
47- if callable ( credentials_or_token_func ):
48- self . _provider = OAuthTokenProvider ( credentials_or_token_func )
49- elif isinstance ( credentials_or_token_func , ClientCredential ):
50- self . _provider = ACSTokenProvider ( self . authority_url , credentials_or_token_func . clientId ,
51- credentials_or_token_func .clientSecret )
52- elif isinstance (credentials_or_token_func , UserCredential ):
48+ def with_access_token (self , token_func ):
49+ self . _provider = OAuthTokenProvider ( token_func )
50+
51+ def with_credentials ( self , credentials , ** kwargs ):
52+ if isinstance ( credentials , ClientCredential ):
53+ self . _provider = ACSTokenProvider ( self . url , credentials . clientId , credentials .clientSecret )
54+ elif isinstance (credentials , UserCredential ):
5355 allow_ntlm = kwargs .get ('allow_ntlm' , False )
5456 if allow_ntlm :
5557 from office365 .runtime .auth .providers .ntlm_provider import NtlmProvider
56- self ._provider = NtlmProvider (credentials_or_token_func .userName ,
57- credentials_or_token_func .password )
58+ self ._provider = NtlmProvider (credentials .userName , credentials .password )
5859 else :
5960 browser_mode = kwargs .get ('browser_mode' , False )
60- self ._provider = SamlTokenProvider (self .authority_url , credentials_or_token_func .userName ,
61- credentials_or_token_func .password , browser_mode )
61+ self ._provider = SamlTokenProvider (self .url , credentials .userName , credentials .password , browser_mode )
6262 else :
6363 raise ValueError ("Unknown credential type" )
6464
@@ -70,20 +70,21 @@ def acquire_token_for_user(self, username, password, browser_mode=False):
7070 :type username: str
7171 :type browser_mode: str
7272 """
73- self ._provider = SamlTokenProvider (url = self .authority_url , username = username , password = password ,
73+ self ._provider = SamlTokenProvider (url = self .url , username = username , password = password ,
7474 browser_mode = browser_mode )
7575 return self ._provider .ensure_authentication_cookie ()
7676
7777 def acquire_token_for_app (self , client_id , client_secret ):
7878 """Acquire token via client credentials (SharePoint App Principal)
7979 Status: deprecated!
8080 """
81- self ._provider = ACSTokenProvider (url = self .authority_url , client_id = client_id , client_secret = client_secret )
81+ self ._provider = ACSTokenProvider (url = self .url , client_id = client_id , client_secret = client_secret )
8282 return self ._provider .ensure_app_only_access_token ()
8383
8484 def authenticate_request (self , request ):
8585 """
8686 Authenticate request
87+
8788 :type request: office365.runtime.http.request_options.RequestOptions
8889 """
8990 self ._provider .authenticate_request (request )
0 commit comments