Office365-rest-python-client: 파일 κ°€μ Έ 였기 μš”μ²­μ‹œ "TypeError : 'str'및 'NoneType'개체λ₯Ό μ—°κ²°ν•  수 μ—†μŠ΅λ‹ˆλ‹€."

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

이 URLμ—μ„œ (λΈŒλΌμš°μ €λ₯Ό 톡해) μ•‘μ„ΈμŠ€ ν•  μˆ˜μžˆλŠ” νŒŒμΌμ„ λ‹€μš΄λ‘œλ“œν•˜λ €κ³ ν•©λ‹ˆλ‹€.
https://test.sharepoint.com/sites/team/team documents / subfolder / document.docx

λ‹€μŒ μ½”λ“œμ™€ ν•¨κ»˜ ClientRequest 개체λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

url = "https://test.sharepoint.com/sites/team"
username="[email protected]"
password="pass"
ctxAuth = AuthenticationContext(url)
if ctxAuth.acquire_token_for_user(username, password):
    print 'authentication successful, proceeding...'
    request = ClientRequest(ctxAuth)
    requestUrl="{0}/_api/web/getfilebyserverrelativeurl('team documents/subfolder/document.docx')"
    options=RequestOptions(requestUrl.format(url))
    data = request.execute_query_direct(options)

이것을 μ‹€ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό 같은 좔적을 μ–»μŠ΅λ‹ˆλ‹€.

$ python test.py
No handlers could be found for logger "client.office365.runtime.auth.saml_token_provider.SamlTokenProvider.process_service_token_response"
authentication successful, proceeding...
Traceback (most recent call last):
  File "test.py", line 14, in <module>
    data = request.execute_query_direct(options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/client_request.py", line 77, in execute_query_direct
    self.context.authenticate_request(request_options)
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/authentication_context.py", line 20, in authenticate_request
    request_options.set_header('Cookie', self.provider.get_authentication_cookie())
  File "/usr/lib/python2.7/site-packages/client/office365/runtime/auth/saml_token_provider.py", line 65, in get_authentication_cookie
    return 'FedAuth=' + self.FedAuth + '; rtFa=' + self.rtFa
TypeError: cannot concatenate 'str' and 'NoneType' objects

λͺ¨λ“ˆμ„ μ‚¬μš©ν•˜λŠ” 방법에 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

SharePoint μΈμŠ€ν„΄μŠ€κ°€ ν”„λ‘μ‹œ λ’€μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— λΉ„μŠ·ν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 둜그인 URL ( self.sts )κ³Ό μΏ ν‚€ 이름을 μž¬μ •μ˜ν•˜κΈ° μœ„ν•΄ SamlTokenProvider λ₯Ό ν•˜μœ„ 클래슀둜 λ§Œλ“€μ–΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” μ΄ˆκΈ°ν™” 쀑에 μ½”λ“œκ°€ acquire_authentication_cookie 의 κ²°κ³Όλ₯Ό ν™•μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 인증에 μ‹€νŒ¨ν•˜λ©΄ μΏ ν‚€λ₯Ό μ‚¬μš©ν•  λ•ŒκΉŒμ§€ 이에 λŒ€ν•΄ 듣지 λͺ»ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

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

SharePoint μΈμŠ€ν„΄μŠ€κ°€ ν”„λ‘μ‹œ λ’€μ—μ„œ μ‹€ν–‰λ˜κΈ° λ•Œλ¬Έμ— λΉ„μŠ·ν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. 둜그인 URL ( self.sts )κ³Ό μΏ ν‚€ 이름을 μž¬μ •μ˜ν•˜κΈ° μœ„ν•΄ SamlTokenProvider λ₯Ό ν•˜μœ„ 클래슀둜 λ§Œλ“€μ–΄μ•Όν–ˆμŠ΅λ‹ˆλ‹€. λ¬Έμ œλŠ” μ΄ˆκΈ°ν™” 쀑에 μ½”λ“œκ°€ acquire_authentication_cookie 의 κ²°κ³Όλ₯Ό ν™•μΈν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 인증에 μ‹€νŒ¨ν•˜λ©΄ μΏ ν‚€λ₯Ό μ‚¬μš©ν•  λ•ŒκΉŒμ§€ 이에 λŒ€ν•΄ 듣지 λͺ»ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

λ‚˜λŠ” 같은 λ¬Έμ œμ— λΆ€λ”ͺμ³€λ‹€. 인증 μ‹€νŒ¨λŠ” μ˜ˆμ™Έλ‘œ μ²˜λ¦¬λ˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. μΏ ν‚€λ₯Ό 쿼리 ν•  λ•Œλ§Œ κ±°ν’ˆμ΄ λ°œμƒν•©λ‹ˆλ‹€. 자격 증λͺ… 확인

같은 문제. 자격 증λͺ…을 ν™•μΈν–ˆμ§€λ§Œ λ¬Έμ œκ°€ μ§€μ†λ©λ‹ˆλ‹€. λ‹€λ₯Έ 생각은? 감사!

κ²°κ΅­ OAuth2Session 을 μ‚¬μš©ν•˜μ—¬ oauth2 인증을 λ°›κ³  κ·Έλž˜ν”„ APIμ—μ„œ 데이터λ₯Ό κ°€μ Έ μ™”μŠ΅λ‹ˆλ‹€. μ˜€λž˜λ˜μ—ˆκ³  더 이상 μ •ν™•ν•œ μ„ΈλΆ€ 사항을 κΈ°μ–΅ν•˜μ§€ λͺ»ν•©λ‹ˆλ‹€.

κ°μ‚¬ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, λ™μΌν•œ λ¬Έμ œκ°€ μžˆμ§€λ§Œ 제 κ²½μš°μ—λŠ” FormAuthentication λ©”μ„œλ“œλ‘œ κ΅¬μ„±λœ SharePointκ°€ 있기 λ•Œλ¬Έμ΄λΌκ³  μƒκ°ν•©λ‹ˆλ‹€. μ μ ˆν•œ 토큰 κ³΅κΈ‰μžκ°€ κ΅¬ν˜„ 될 λ•ŒκΉŒμ§€ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œλ„ λ°œμƒν•˜μ§€λ§Œ outlook.com 계정을 μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λ§Œ λ°œμƒν•©λ‹ˆλ‹€. λ‚˜λŠ” λˆ„κ΅°κ°€κ°€ λ’€μ—μ„œ 무슨 일이 μΌμ–΄λ‚˜κ³  μžˆλŠ”μ§€ μ„€λͺ…ν•˜κ³  μ•„λ§ˆλ„ 해결책을 제곡 ν•  수 있기λ₯Ό λ°”λžλ‹ˆλ‹€. λ‹€μŒμ€ κ°„λ‹¨ν•œ μ„€λͺ…μž…λ‹ˆλ‹€.

1) SharePoint μ‚¬μ΄νŠΈλŠ” ν΄λΌμš°λ“œμ— μžˆμŠ΅λ‹ˆλ‹€ (https://mn365.sharepoint.com).
2) λ―Έλ„€μ†Œνƒ€ μ£Ό 자격 증λͺ…을 μ‚¬μš©ν•˜μ—¬ μ‚¬μ΄νŠΈμ— μ—°κ²°ν•˜λ©΄ μ œλŒ€λ‘œ μ—°κ²°λ©λ‹ˆλ‹€.
3)ν•˜μ§€λ§Œ λ‚΄ μ‘μš© ν”„λ‘œκ·Έλž¨μ— λ‚΄ μžμ‹ μ˜ 자격 증λͺ…을 ν¬ν•¨ν•˜κ³  싢지 μ•ŠκΈ° λ•Œλ¬Έμ— " [email protected] "쀄을 따라 "μ„œλΉ„μŠ€ 계정"을 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 이 계정은 μ‹€νŒ¨ν•©λ‹ˆλ‹€.

outlook.com μ£Όμ†Œλ₯Ό μ‚¬μš©ν•˜λŠ” 것과 λ‚΄ μ‘°μ§μ—μ„œ λ°œκΈ‰ ν•œ μ£Όμ†Œ (이 경우 firstName. [email protected]) λ₯Ό μ‚¬μš©ν•˜λŠ” κ²ƒμ˜ 인증 μ°¨μ΄λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ

여기에도 같은 λ¬Έμ œκ°€ μžˆμŠ΅λ‹ˆλ‹€. 인증을 μœ„ν•΄ AD FSλ₯Ό μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. μ§€κΈˆκΉŒμ§€λŠ” SharePoint 온라인 μ„œλ²„μ—μ„œ 정보λ₯Ό 얻을 μˆ˜μžˆλŠ” 방법을 찾지 λͺ»ν–ˆμŠ΅λ‹ˆλ‹€. λ§Žμ€ 라이브러리λ₯Ό μ‹œλ„ν–ˆμ§€λ§Œ 아무것도 νš¨κ³Όκ°€ μ—†μ—ˆμŠ΅λ‹ˆλ‹€.

Sharepointκ°€ 인증을 μœ„ν•΄ 온 ν”„λ ˆλ―ΈμŠ€ STS / ADFS둜 λ¦¬λ””λ ‰μ…˜ν–ˆκΈ° λ•Œλ¬Έμ— λ™μΌν•œ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.

O365μ—μ„œ 직접 μƒˆ O365 μ‚¬μš©μžλ₯Ό λ§Œλ“€μ—ˆμœΌλ―€λ‘œ 온-ν”„λ ˆλ―ΈμŠ€ STS / ADFS 둜의 λ¦¬λ””λ ‰μ…˜μ„ μ‚¬μš©ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. 이것은 였λ₯˜λ₯Ό ν•΄κ²°ν–ˆμŠ΅λ‹ˆλ‹€ πŸ‘

λ‚˜λŠ” ootbλ₯Ό μ‹€ν–‰ν•˜κ³  λ‚΄ 쑰건을 λ‹€λ£¨λŠ” sharepy둜 μ „ν™˜ν–ˆμŠ΅λ‹ˆλ‹€.

μ—¬κΈ°μ—μ„œ 동일 :
둜거 "office365.runtime.auth.saml_token_provider.SamlTokenProvider._process_service_token_response"에 λŒ€ν•œ 처리기λ₯Ό 찾을 수 μ—†μŠ΅λ‹ˆλ‹€.

λ‹€λ₯Έ μ‚¬λžŒμ—κ²Œ ν–‰μš΄μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

λ‹€μŒμ€ λ²”μœ„λ₯Ό 더 μ’νžˆλŠ” 데 도움이 될 수 μžˆμŠ΅λ‹ˆλ‹€.

일반 SharePoint URLμ—μ„œλŠ” μ„±κ³΅μ μœΌλ‘œ 인증 ν•  수 μžˆμ§€λ§Œ νŠΉμ • νŒ€ 채널을 κ°€λ¦¬ν‚€λŠ” URLμ—μ„œλŠ” 인증 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‹€μŒ μ½”λ“œλŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€.

url = "https://COMPANYNAME.sharepoint.com/"
username=raw_input("username: ")
password=raw_input("password: ")
ctx_auth = AuthenticationContext(url=url)
if ctx_auth.acquire_token_for_user(username=username, password=password):

ν•˜μ§€λ§Œ URL을 λ‹€μŒμœΌλ‘œ λ°”κΏ€ λ•Œ :

url = "https://COMPANYNAME.sharepoint.com/sites/TEAMSCHANNEL/"

그런 λ‹€μŒ λ‹€μŒ 였λ₯˜κ°€ λ°œμƒν•©λ‹ˆλ‹€. :

No handlers could be found for logger "office365.runtime.auth.saml_token_provider.SamlTokenProvider.acquire_authentication_cookie"

λͺ¨λ“  ν•΄κ²° 방법이 κ°μ‚¬ν•©λ‹ˆλ‹€. λ‚΄ λΈŒλΌμš°μ €μ—μ„œ λ‘˜ λ‹€ 잘 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ˜ μ‚¬μš© 사둀에 λŒ€ν•œ ν•΄κ²° 방법을 μ°Ύμ•˜μŠ΅λ‹ˆλ‹€. AuthenticationContext λ₯Ό μ–»μœΌλ €λ©΄ κΈ°λ³Έ URL을 μ‚¬μš©ν•˜μ‹­μ‹œμ˜€. λ‹€λ₯Έ URL을 μ‚¬μš©ν•˜μ—¬ μƒˆ ClientContext 개체λ₯Ό λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€.

base_url = "https://COMPANYNAME.sharepoint.com/"
ctx_auth = AuthenticationContext(url=base_url)
if not ctx_auth.acquire_token_for_user(username=user, password=password):
    sys.exit('Error in getting token - quitting')
url = base_url + "sites/TEAMSCHANNEL/"
ctx = ClientContext(url, ctx_auth)
..
..

μ–˜λ“€ μ•„!

이 λ¬Έμ œκ°€λ³΄κ³  된 이후 μ§€κΈˆκΉŒμ§€ _SharePoint Online을 μ‚¬μš©ν•œ SAML 기반 νŽ˜λ”λ ˆμ΄μ…˜ 인증 지원 _ μΈ‘λ©΄μ—μ„œ λ‹€μŒκ³Ό 같은 κ°œμ„  / 버그 μˆ˜μ •μ΄ μ΄λ£¨μ–΄μ‘ŒμŠ΅λ‹ˆλ‹€.

  • # 210-SharePoint에 μ—°κ²°ν•  수 μ—†μŒ (νŽ˜λ”λ ˆμ΄μ…˜ 된 경우 acquire_authentication_cookie 였λ₯˜)
  • # 170-토큰을 κ²€μƒ‰ν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€ : AADSTS50126 : 잘λͺ»λœ μ‚¬μš©μž 이름 λ˜λŠ” μ•”ν˜Έλ‘œ 인해 자격 증λͺ…을 ν™•μΈν•˜λŠ” λ™μ•ˆ 였λ₯˜κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.
  • # 85-ADFS와 ν•¨κ»˜ Office-365-REST μ‚¬μš©
  • # 84-온-ν”„λ ˆλ―ΈμŠ€ STSκ°€μžˆλŠ” μ‚¬μ΄νŠΈκ°€ μΈμ¦λ˜μ§€ μ•ŠμŒ (AADSTS70002)

λ”°λΌμ„œ 제곡된 였λ₯˜κ°€ 더 이상 λ°œμƒν•˜μ§€ μ•Šμ•„μ•Όν•©λ‹ˆλ‹€. _latest_ 버전 ( 2.1.10.1 이상)을 ν™•μΈν•˜μ‹­μ‹œμ˜€.

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