Office365-rest-python-client: IndexError: λͺ©λ‘ μΈλ±μŠ€κ°€ λ²”μœ„λ₯Ό λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 12μ›” 08일  Β·  14μ½”λ©˜νŠΈ  Β·  좜처: vgrem/Office365-REST-Python-Client

κ·€ν•˜μ—κ²Œ,
더 이상 μ…°μ–΄ν¬μΈνŠΈμ— μ—°κ²°ν•˜μ§€ μ•ŠλŠ” 이유λ₯Ό μ•Œμ•„λ‚΄λ„λ‘ λ„μ™€μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

버전 2.2.2μ—μ„œλŠ” λͺ¨λ“  것이 잘 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€.
그런 λ‹€μŒ 문제 #272(XML μ‘λ‹΅μ—μ„œ 토큰 검색 쀑 였λ₯˜ λ°œμƒ: AADSTS500069)κ°€ λ°œμƒν•˜μ—¬ 2.3.0.1둜 μ—…κ·Έλ ˆμ΄λ“œν–ˆμŠ΅λ‹ˆλ‹€.
이제 λ‹€μŒ μ½”λ“œλ„ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.
def copy_sharepoint(self,filename=""):
ctx = ClientContext(self.SITE_SHAREPOINT).with_credentials(UserCredential(self.WIN_USER,self.WIN_PASSWORD))
localpath=os.path.join(self.CHEMIN_XLSX,self.NOM_TIR + '/',self.FICHIER_BI)
self.print_debug("",localpath)
self.print_debug("",self.WIN_PASSWORD)
open(localpath, 'rb')λ₯Ό content_file둜 μ‚¬μš©:
file_content = content_file.read()
파일 = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI, file_content).execute_query()

역좔적(κ°€μž₯ 졜근 호좜 λ§ˆμ§€λ§‰):
파일 "/appli/sopra/tools/tir_bench.py", 라인 1327,
tir_bench.copy_sharepoint()
copy_sharepoint의 파일 "/appli/sopra/tools/tir_bench.py", 1278ν–‰
파일 = ctx.web.get_folder_by_server_relative_url(self.CHEMIN_SHAREPOINT).upload_file(self.FICHIER_BI, file_content).execute_query()
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_object.py", 30ν–‰, execute_query
self.context.execute_query()
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", 138ν–‰, execute_query
self.pending_request().execute_query()
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", 73ν–‰, execute_query
self.beforeExecute.notify(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/types/EventHandler.py", 18ν–‰, μ•Œλ¦Ό
λ¦¬μŠ€λ„ˆ( args, * kwargs)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", 162ν–‰, _build_modification_query
self.ensure_form_digest(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", 123ν–‰,sure_form_digest
self.request_form_digest()
request_form_digest의 파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py", 130ν–‰
응닡 = self.execute_request_direct(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_runtime_context.py", 134ν–‰, execute_request_direct
λ°˜ν™˜ self.pending_request().execute_request_direct(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/odata/odata_request.py", 34ν–‰, execute_request_direct
return super(ODataRequest, self).execute_request_direct(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/client_request.py", 86ν–‰, execute_request_direct
self.context.authenticate_request(μš”μ²­_μ˜΅μ…˜)
"/home/benchsp/.local/lib/python3.9/site-packages/office365/sharepoint/client_context.py" 파일, 151ν–‰, 인증 μš”μ²­
self._auth_context.authenticate_request(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/authentication_context.py", 84ν–‰, authenticate_request
self._provider.authenticate_request(μš”μ²­)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", 73ν–‰, authenticate_request
self.ensure_authentication_cookie()

파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", 80ν–‰,sure_authentication_cookie
self._cached_auth_cookies = self.get_authentication_cookie()
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", 93ν–‰, get_authentication_cookie
토큰 = self._acquire_service_token_from_adfs(user_realm.STSAuthUrl)
파일 "/home/benchsp/.local/lib/python3.9/site-packages/office365/runtime/auth/providers/saml_token_provider.py", 136ν–‰, _acquire_service_token_from_adfs
assertion_node = dom.getElementsByTagNameNS("urn:oasis:names:tc:SAML:1.0:assertion", 'μ–΄μ„€μ…˜')[0].toxml()
IndexError: λͺ©λ‘ μΈλ±μŠ€κ°€ λ²”μœ„λ₯Ό λ²—μ–΄λ‚¬μŠ΅λ‹ˆλ‹€.

κ·Έ 문제λ₯Ό λ„μ™€μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.
기욀

λͺ¨λ“  14 λŒ“κΈ€

μ•ˆλ…•ν•˜μ„Έμš”,
λ˜ν•œ λ‹€μŒμ€ response.content.decode())의 κ°’μž…λ‹ˆλ‹€.

http://www.w3.org/2005/08/addressing/soap/faultcfb81633-ff49-4e50-9544-7e39214d7122
<value i="14">s:Sender</value><subcode i="15"><value i="16">a:InvalidSecurity</value></subcode>λ©”μ‹œμ§€μ˜ λ³΄μ•ˆμ„ ν™•μΈν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

인사말!

SharePoint/ADFS ν™˜κ²½μ— λŒ€ν•΄ 확인할 κ°€λŠ₯성이 μ—†λŠ” ν˜„μž¬λ‘œμ„œλŠ” μžμ„Έν•œ λ‘œκ·Έμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

@wreinerλ‹˜ , _federated authentication_이 μ΅œμ‹  λ¦΄λ¦¬μŠ€μ—μ„œ μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•˜λŠ”μ§€ μΉœμ ˆν•˜κ²Œ 확인해 μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„

λΉ„μŠ·ν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 쀄은 400 λ˜λŠ” 500 응닡을 μ œκ³΅ν•©λ‹ˆλ‹€.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

400 응닡을 λ°›λŠ” 경우 본문이 λΉ„μ–΄ μžˆμ–΄ xml.parsers.expat.ExpatError: no element found: line 1, column 0 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. 500 응닡은 @guillaume-colas와 λ™μΌν•œ μ˜ˆμ™Έλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

아직 νŒ¨ν‚€μ§€κ°€ μž‘λ™ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 곡유 μ„œλ²„μΌ 수 μžˆμ§€λ§Œ ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€λ₯Ό λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ…°μ–΄ν¬μΈνŠΈ 인증이 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ—ˆλŠ”μ§€ μ–΄λ–»κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

미리 톑!

μ•ˆλ…•ν•˜μ„Έμš”,

λ‚˜λŠ” μ™„μ „νžˆ λΆ„μ„ν•˜κΈ° μœ„ν•΄ λ‚΄ 컴퓨터에 μžˆμ§€ μ•Šμ§€λ§Œ λ‚΄κ°€ λ³Ό 수 μžˆλ“―μ΄ pip둜 μ΅œμ‹  버전을 μ„€μΉ˜ν•  λ•Œ _runtime/auth/providers/saml_token_provider.py_μ—μ„œ _acquire_service_token_from_adfs_ κΈ°λŠ₯이 λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

λ‚΄ pull μš”μ²­μ—λŠ” 이 κΈ°λŠ₯이 μ œκ±°λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ μ™œ λˆ„λ½λ˜μ—ˆλŠ”μ§€ 잘 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€. λ˜ν•œ datetime ν˜•μ‹μ— λŒ€ν•œ μˆ˜μ • 사항은 νŒŒμΌμ— μ—†μŠ΅λ‹ˆλ‹€. 병합에 였λ₯˜κ°€ μžˆμ—ˆλ˜ 것은 μ•„λ‹κΉŒμš”?

@wreiner λ‹€μ‹œ

Acquire_service_token_from_adfsκ°€ λˆ„λ½λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

κ³΅κ°œμ—μ„œ λΉ„κ³΅κ°œ 둜 λ¦¬νŒ©ν† λ§λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

datetime ν˜•μ‹μ— λŒ€ν•œ μˆ˜μ • 사항이 νŒŒμΌμ— μ—†μŠ΅λ‹ˆλ‹€.

ν˜•μ‹μ€ μ›λž˜ μ»€λ°‹λœ λŒ€λ‘œ μ œμžλ¦¬μ— μžˆμ–΄μ•Ό ν•˜μ§€λ§Œ 선언을 sts_profile.py 둜 μ΄λ™ν•˜λŠ” μΈ‘λ©΄μ—μ„œ μ•½κ°„ λ¦¬νŒ©ν† λ§λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

self.created = now.astimezone(timezone.utc).isoformat('T')[:-9] + 'Z' self.expires = (now + timedelta(minutes=10)).astimezone(timezone.utc).isoformat('T')[:-9] + 'Z'

κ·ΈλŸ¬λ‚˜ 병합 ν›„ 무언가가 λˆ„λ½λ˜λ©΄ λΉ„λ‚œλ°›μ•„μ•Ό ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš” μ—¬λŸ¬λΆ„

λΉ„μŠ·ν•œ λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. λ‹€μŒ 쀄은 400 λ˜λŠ” 500 응닡을 μ œκ³΅ν•©λ‹ˆλ‹€.

https://github.com/vgrem/Office365-REST-Python-Client/blob/020c8c8176ce2eea3accbe95e2e4372af57ef6c8/office365/runtime/auth/providers/saml_token_provider.py#L133

400 응닡을 λ°›λŠ” 경우 본문이 λΉ„μ–΄ μžˆμ–΄ xml.parsers.expat.ExpatError: no element found: line 1, column 0 μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€. 500 응닡은 @guillaume-colas와 λ™μΌν•œ μ˜ˆμ™Έλ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

아직 νŒ¨ν‚€μ§€κ°€ μž‘λ™ν•˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 곡유 μ„œλ²„μΌ 수 μžˆμ§€λ§Œ ν™•μ‹€νžˆ ν•˜κΈ° μœ„ν•΄ νŒ¨ν‚€μ§€λ₯Ό λ‹€μš΄κ·Έλ ˆμ΄λ“œν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ…°μ–΄ν¬μΈνŠΈ 인증이 μ˜¬λ°”λ₯΄κ²Œ μ„€μ •λ˜μ—ˆλŠ”μ§€ μ–΄λ–»κ²Œ 확인할 수 μžˆμŠ΅λ‹ˆκΉŒ?

미리 톑!

μ•ˆλ…• 마크,

확인해 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ μ΅œμ‹  λ²„μ „μ˜ μ—°ν•© 인증(SharePoint/ADFS)μ—μ„œ λ‹€μ†Œ 깨진 κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
_이전_ 버전( 2.2.2 )을 μ‚¬μš©ν•΄ λ³΄μ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ™„μ „ν•œ 뢄석은 μ•„λ‹ˆμ§€λ§Œ λ³€κ²½ 사항에 λŒ€ν•΄ λ³΄μ•ˆ 토큰과 μΏ ν‚€λ₯Ό μ˜¬λ°”λ₯΄κ²Œ λ°˜ν™˜ν•œλ‹€κ³  말할 수 μžˆμ§€λ§Œ μΏ ν‚€ ν•­μ•„λ¦¬μ—λŠ” ν˜„μž¬ _get_authentication_cookieμ—μ„œ μ‚¬μš© 쀑인 is_valid_auth_cookiesμ—μ„œ μ°ΎλŠ” 'FedAuth' ν•„λ“œκ°€ μ—†μŠ΅λ‹ˆλ‹€.

https://github.com/vgrem/Office365-REST-Python-Client/blob/93325ea33675b86aafc2e6e0fa381c184ce479e7/office365/runtime/auth/providers/saml_token_provider.py#L32

μ—°ν•© 인증의 경우 항아리에 SPOIDCRL만 ν‘œμ‹œλ©λ‹ˆλ‹€.

ν˜„μž¬ λ‚˜λŠ” μ—¬μ „νžˆ νšλ“ν•œ 인증 데이터λ₯Ό μ˜¬λ°”λ₯΄κ²Œ μ‚¬μš©ν•  수 μ—†μœΌλ©°, μ—¬μ „νžˆ 쑰사 μ€‘μ΄μ§€λ§Œ μ–Όλ§ˆλ‚˜ 였래 ν•„μš”ν• μ§€ μ•Œ 수 μ—†μŠ΅λ‹ˆλ‹€.

λŒ€μ²΄λ‘œ λ‚˜λŠ” 이전 버전과 λ‚΄ 패치둜 λͺ¨λ“  것이 μ—¬μ „νžˆ μ˜ˆμƒλŒ€λ‘œ 잘 μž‘λ™ν•˜μ§€λ§Œ λΆˆν–‰νžˆλ„ μƒˆ λ²„μ „μ—μ„œλŠ” 그렇지 μ•Šλ‹€κ³  말할 수 μžˆμŠ΅λ‹ˆλ‹€.

λΉ λ₯Έ λ‹΅λ³€ κ°μ‚¬ν•©λ‹ˆλ‹€ :-)

@vgrem 버전 2.2.2μ—μ„œλ„ λΉ„μŠ·ν•œ 였λ₯˜κ°€ λ°œμƒν•˜λ―€λ‘œ 곡유점 μ„œλ²„μΈ 것 κ°™μŠ΅λ‹ˆλ‹€.

μ˜ˆμ™Έλ₯Ό 더 읽기 μ‰¬μš΄ κ²ƒμœΌλ‘œ λž˜ν•‘ν•˜λŠ” 것이 쒋을 수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” ν•œ 걸음 더 λ‚˜μ•„κ°”λ‹€. λΉ„λ°€λ²ˆν˜Έλ₯Ό μž¬μ„€μ •ν•΄μ•Ό ν•˜λŠ” κ²ƒμœΌλ‘œ λ‚˜νƒ€λ‚¬μŠ΅λ‹ˆλ‹€. 이제 @wreiner와 λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. is_valid_auth_cookies λŠ” 사전에 SPOIDCRL ν‚€λ§Œ ν¬ν•¨ν•˜κ³  FedAuth ν‚€λŠ” ν¬ν•¨ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μΏ ν‚€κ°€ μœ νš¨ν•˜μ§€ μ•ŠμŒμ„ λ°˜ν™˜ν•©λ‹ˆλ‹€. 이 μΏ ν‚€κ°€ μœ νš¨ν•œμ§€ μ—¬λΆ€λ₯Ό ν™•μΈν•˜κΈ°λ§Œ ν•˜λ©΄ 주석 μ²˜λ¦¬λ©λ‹ˆλ‹€. μ…°μ–΄ν¬μΈνŠΈμ—μ„œ νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ 인증이 잘 λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

μ•„λ§ˆλ„ 버전 2.2.2λ₯Ό λ‹€μ‹œ μ‹œλ„ν•  κ²ƒμž…λ‹ˆλ‹€.

같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. is_valid_auth_cookies λŠ” μΏ ν‚€ 사전에 FedAuth ν‚€κ°€ μ—†κΈ° λ•Œλ¬Έμ— False is_valid_auth_cookies λ°˜ν™˜ν•©λ‹ˆλ‹€. λ°˜ν™˜ μ½”λ“œμ— 주석을 달고 λ°˜ν™˜ Trueλ₯Ό λ‹¨μˆœν™”ν•˜λ©΄ 인증이 μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

def is_valid_auth_cookies(values):
    return True
    # return any(values) and values.get('FedAuth', None) is not None

μ•ˆλ…•ν•˜μ„Έμš” @hungnguyen95 , ν™•μΈν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€!

is_valid_auth_cookies 을 μ‘°μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”,
is_valid_auth_cookies λ₯Ό μˆ˜μ •ν•˜λ©΄ λ¬Έμ œκ°€ ν•΄κ²°λ©λ‹ˆκΉŒ?

λ‚˜λŠ” μ—¬κΈ°μ„œ κ½€ 길을 μžƒμ—ˆμŠ΅λ‹ˆλ‹€. μ£„μ†‘ν•©λ‹ˆλ‹€. λ‚΄ λ¬Έμ œκ°€ _acquire_service_token_from_adfs에 μžˆλ‹€κ³  μƒκ°ν–ˆμŠ΅λ‹ˆλ‹€.
μ™œ λ‚΄κ°€ '잘λͺ»λœ λ³΄μ•ˆ'μ΄λΌλŠ” 응닡을 λ°›κ³  인증을 λ°›κΈ° μœ„ν•œ ν•΄κ²° 방법을 μ•Œκ³  μžˆμŠ΅λ‹ˆκΉŒ?

도움을 μ£Όμ…”μ„œ 미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.
기욀

@guillaume-colas κ·€ν•˜μ˜ λ¬Έμ œλŠ” μ•‘μ„ΈμŠ€λ₯Ό ν—ˆμš©ν•˜μ§€ μ•ŠλŠ” μ„œλ²„μ™€ κ΄€λ ¨λœ 것 κ°™μŠ΅λ‹ˆλ‹€. λΉ„λ°€λ²ˆν˜Έκ°€ μ •ν™•ν•˜κ³  λΉ„λ°€λ²ˆν˜Έ μž¬μ„€μ •μ„ μ‹œλ„ν–ˆμŠ΅λ‹ˆκΉŒ? λΉ„λ°€λ²ˆν˜Έλ₯Ό μž¬μ„€μ •ν•˜λ©΄ 이 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆλ‹€. κ·Έ ν›„ is_valid_auth_cookies λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

@mark-boer 예, λΉ„λ°€λ²ˆν˜Έλ₯Ό ν™•μΈν–ˆμœΌλ©° μ •ν™•ν•©λ‹ˆλ‹€. 2FA(sms code)λ₯Ό ν†΅ν•œ 인증이 인증을 μ°¨λ‹¨ν•˜κ³  μžˆλŠ” 것은 μ•„λ‹κΉŒμš”?

ClientCredentialsλ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ…°μ–΄ν¬μΈνŠΈμ— μ—…λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆκΉŒ?

도움을 μ£Όμ…”μ„œ 미리 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰