рдирдорд╕реНрддреЗ,
рдореИрдВрдиреЗ Office365-REST-Python-Client рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЗрдВрдЯреНрд░рд╛рдиреЗрдЯ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдкреЛрд░реНрдЯрд▓ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ рдХреНрд▓рд╛рд╕ рд╕реЗ рдЕрдзрд┐рдЧреНрд░рд╣рдг_рдЯреЛрдХрди_for_user() рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
рдпреВрдЖрд░рдПрд▓ = " https://mycompany.sharepoint.com "
ctx_auth = рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓)
ctx_auth.acquire_token_for_user("my_username", "my_password")
рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддрд╛ рд╣реИ:
рд╡рд┐рд╢реЗрд╖рддрд╛ рддреНрд░реБрдЯрд┐: 'рдХреЛрдИ рдирд╣реАрдВ' рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖рддрд╛ рдирд╣реАрдВ рд╣реИ 'рдкрд╛рда'
рд╕рд╛рджрд░,
рдирд┐рд╢рд╛рди
рдореБрдЭреЗ рдареАрдХ рд╡реИрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдорд┐рд▓рд╛ рд╣реИ
рд╡рд╣реА, рдпрд╣ рдЕрднреА рдкреЙрдк рдЕрдк рд╣реБрдЖ рд╣реИ, рдЕрдм рд╢реЗрдпрд░ рдкреНрд╡рд╛рдЗрдВрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ рдФрд░ рдПрдВрдЯрд░рдкреНрд░рд╛рдЗрдЬрд╝ рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддрд╛ред рдЕрдиреНрдп рдЕрдВрдХ рдореЗрдВ (#76, 5 рдЕрдЧрд╕реНрдд 2018 рдХреЛ) рдЕрдЧрд▓рд╛ рд╕рдорд╛рдзрд╛рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ (рдЬреЛ рдЕрднреА рддрдХ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ):
_рд╣рд▓ рдХрд┐рдпрд╛ред рдореБрджреНрджрд╛ рдПрдХ рдХрдВрдкрдиреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдерд╛, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, Azure рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдФрд░ рдЖрдВрддрд░рд┐рдХ рд╕рдХреНрд░рд┐рдп рдбрд╛рдпрд░реЗрдХреНрдЯреНрд░реА рдХреЗ рдмреАрдЪ рдПрдХ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмреИрдЪ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдХреНрд▓рд╛рдЙрдб AAD рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрдирд╛рдпрд╛ рд╣реИред_
рдЕрд╕рд▓ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдПрдбреА рдореЗрдВ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ :( рдХреЛрдИ рд╕рдорд╛рдзрд╛рди/рд╕реБрд░рд╛рдЧ?
рдореЗрд░рд╛ рдХреЛрдб рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = 'рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо'
рдкрд╛рд╕рд╡рд░реНрдб = 'рдорд╛рдпрдкрд╛рд╕рд╡рд░реНрдб'
ctx_auth.acquire_token_for_user (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб = рдкрд╛рд╕рд╡рд░реНрдб)
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреВрдЖрд░рдПрд▓ " https://mycompany.sharepoint.com/sites/AnotherSite " рдпрд╛ " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite " рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:
from office365.runtime.auth.authentication_context import AuthenticationContext
from office365.runtime.client_request import ClientRequest
from office365.runtime.utilities.request_options import RequestOptions
user_credentials = {
'username' : '[email protected]',
'password' : 'my_password'
}
site_url = "https://mycompany.sharepoint.com/"
ctx_auth = AuthenticationContext(site_url)
if ctx_auth.acquire_token_for_user(user_credentials['username'], user_credentials['password']):
request = ClientRequest(ctx_auth)
options = RequestOptions("{0}/_api/web/lists".format(site_url))
options.set_header('Accept', 'application/json')
options.set_header('Content-Type', 'application/json')
data = request.execute_request_direct(options)
s = json.loads(data.content)
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ PulRequest #168 рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП
рдЕрдм рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╣рдореЗрдВ рдпрд╣ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реАред
рдиреЛрдЯ: рдЖрдкрдХреЛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг 2.1.6-1 . рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдЕрд░реЗ рдорд╛рд░реНрдХ, @KasperSvendsen рдФрд░ @fpinab ,
рдЬрдм рд╕реЗ рдЖрдкрдиреЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЕрдкрдбреЗрдЯ:
рдЕрд╕рд▓ рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдПрдбреА . рдореЗрдВ рдореЗрд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИ
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЖрдк ADFS рдкрд░рд┐рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП
рдЕрдЪреНрдЫреА рдЦрдмрд░, рд╢реЗрдпрд░рдкреЙрдЗрдВрдЯ рдСрдирд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдПрд╕рдПрдПрдордПрд▓-рдЖрдзрд╛рд░рд┐рдд рдлрд╝реЗрдбрд░реЗрдЯреЗрдб рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди 2.1.7
рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╕рдХреНрд░рд┐рдп рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╣рдореЗрдВ рдЕрднреА рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ
рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдмрд╣реБ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЕрдХреНрд╖рдо рд╣реИ
рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ
рдЪреВрдВрдХрд┐ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрднреА рддрдХ PyPi рдХреЛ рдЬрд╛рд░реА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдЗрд╕ рд╕рдордп GitHub рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ:
рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд git+ https://github.com/vgrem/Office365-REST-Python-Client.git
рдЪреАрдпрд░реНрд╕,
рд╡рд╛рджрд┐рдо
@vgrem
рдПрдбреАрдПрдлрдПрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ред
рдиреАрдЪреЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рд╣реИ:
from office365.runtime.auth.authentication_context import AuthenticationContext
account = "[email protected]"
password = "example"
url = "https://example.sharepoint.com/sites/base-dok-testing"
ctx_auth = AuthenticationContext(url)
ctx_auth.acquire_token_for_user(account, password)
рдиреАрдЪреЗ рд▓реЙрдЧ рд╣реИ:
16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:45] acquire_token called
[16/Jun/2020 10:18:15] DEBUG [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_token:acquire_token:48] Acquiring Access Token..
[16/Jun/2020 10:18:15] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /GetUserRealm.srf HTTP/1.1" 200 1448
[16/Jun/2020 10:18:16] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): fs.kerialis.fr:443
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://fs.kerialis.fr:443 "POST /adfs/services/trust/2005/usernamemixed HTTP/1.1" 200 6542
[16/Jun/2020 10:18:20] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): login.microsoftonline.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://login.microsoftonline.com:443 "POST /rst2.srf HTTP/1.1" 200 3499
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_new_conn:955] Starting new HTTPS connection (1): kerialisfr.sharepoint.com:443
[16/Jun/2020 10:18:21] DEBUG [none] [urllib3.connectionpool:_make_request:428] https://kerialisfr.sharepoint.com:443 "HEAD /sites/base-dok-testing/_vti_bin/idcrl.svc HTTP/1.1" 401 0
[16/Jun/2020 10:18:21] ERROR [none] [office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie:acquire_authentication_cookie:208] An error occurred while retrieving auth cookies from https://kerialisfr.sharepoint.com/sites/base-dok-testing/_vti_bin/idcrl.svc
@Simplici , рдХреНрдпрд╛ рдЖрдк рд╕рдХрд╛рд░рд╛рддреНрдордХ рд╣реИрдВ рд╕рдВрд╕реНрдХрд░рдг v2.1.8
рдпрд╛ рдмрд╛рдж рдореЗрдВ рдЖрдкрдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?
рдЕрдиреНрдпрдерд╛ рдЖрдк рдЙрд╕реА рдореБрджреНрджреЗ рдкрд░ рдареЛрдХрд░ рдЦрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред
@vgrem рдореИрдВ
рдореИрдВ рдирд╡реАрдирддрдо рд░рд┐рд▓реАрдЬ 2.1.9 рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдкрд░рд┐рдгрд╛рдо рд╡рд╣реА рд╣реИред
рдореЗрд░реЗ рд╕рд╣рдпреЛрдЧреА рдиреЗ рдХреБрдЫ рд╕рдВрд╢реЛрдзрди рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/vgrem/Office365-REST-Python-Client/issues/210ред
@vgrem рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдб рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ " https://company.sharepoint.com/_vti_bin/idcrl.svc рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреБрдХреАрдЬрд╝ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рддреНрд░реБрдЯрд┐ рд╣реБрдИ"
рдореЗрд░реЗ рдкрд╛рд╕ 2.1.7.post1 рднреА рд╕реНрдерд╛рдкрд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдкрд╛рд╕ рдмрд╣реБ рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред
Office365.runtime.auth.authentication_context рд╕реЗ рдЖрдпрд╛рдд рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╕рдВрдЧ
Office365 рд╕реЗ.sharepoint.client_context рдЖрдпрд╛рдд ClientContext
Office365.sharepoint.file рд╕реЗ рдЖрдпрд╛рдд рдлрд╝рд╛рдЗрд▓
рдпреВрдЖрд░рдПрд▓ = ' https://company.sharepoint.com '
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо = ' [email protected] '
рдкрд╛рд╕рд╡рд░реНрдб = 'xxx'
ctx_auth = рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓)
рдЕрдЧрд░ ctx_auth.acquire_token_for_user (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо, рдкрд╛рд╕рд╡рд░реНрдб):
рд╕реАрдЯреАрдПрдХреНрд╕ = рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдЯреЗрдХреНрд╕реНрдЯ (рдпреВрдЖрд░рдПрд▓, рд╕реАрдЯреАрдПрдХреНрд╕_рдСрде)
рд╡реЗрдм = ctx.web
...
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпреВрдЖрд░рдПрд▓ " https://mycompany.sharepoint.com/sites/AnotherSite " рдпрд╛ " https://mycompany.sharepoint.com/sites/AnotherSite/Subsite " рдЬреИрд╕рд╛ рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: